linux shell 用sed命令在文本的行尾或行首添加字符

昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~

用sed命令在行首或行尾添加字符的命令有以下几种:

假设处理的文本为test.file

在每行的头添加字符,比如"HEAD",命令如下:

sed 's/^/HEAD&/g' test.file

在每行的行尾添加字符,比如“TAIL”,命令如下:

sed 's/$/&TAIL/g' test.file

运行结果如下图:

几点说明:

1."^"代表行首,"$"代表行尾

2.'s/$/&TAIL/g'中的字符g代表每行出现的字符全部替换,如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找了

例:

3.如果想导出文件,在命令末尾加"> outfile_name";如果想在原文件上更改,添加选项"-i",如

4.也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file

以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。

众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:

Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。

好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用"cat -A test.file"命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。

要把文件转换一下,有两种方法:

1.命令dos2unix test.file

2.去掉"\r" ,用命令sed -i 's/\r//' test.file

好了,这样处理完,就OK啦!!!

转载于:https://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html

### 回答1: 要在文件末尾添加一个for循环,可以使用sed命令来实现。sed一个流编辑器,可以对文件内容进行操作。 首先,使用sed命令的"i"选项来插入一行文本到文件末尾。可以使用以下命令: ```shell sed -i '$a\for i in $(seq 1 10); do echo $i; done' 文件名 ``` 上述命令中,“$”表示文件的末尾,而"a"表示在末尾追加文本。"\for i in $(seq 1 10); do echo $i; done"是要追加的for循环内容。$(seq 1 10)表示生成从1到10的连续数字,echo $i用于打印每个数字。 运行上述命令后,会将for循环内容添加到文件的末尾。如果希望将结果输出到一个新的文件中,可以将-i选项移除。 注意,使用sed命令修改文件时,请务必备份原文件,以避免数据丢失。 ### 回答2: 在Linux中,我们可以使用sed命令来编辑文本文件。sed一个流编辑器,可以对文件进行行级别的编辑和转换。 如果需要在文件末尾添加for循环,可以使用以下sed命令: ``` sed -i '$ a\ for i in {1..10}; do\ # 在这里编写需要执行的操作\ done' filename ``` 解释一下这个命令: - `-i`选项表示直接在原文件中进行编辑,而不是输出到终端。 - `'$ a\`表示在最后一行末尾添加内容。 - `for i in {1..10}; do\`表示开始一个for循环,循环变量i的范围为1到10。 - `# 在这里编写需要执行的操作\`表示在for循环中可以编写具体的操作,注意需要使用反斜杠`\`进行转义。 将`filename`替换为要编辑的文件名即可。 这样,sed命令将在文件的末尾添加一个简单的for循环,你可以根据自己的需求在循环内编写需要执行的操作。 ### 回答3: 要在文件末尾添加for循环,可以使用sed命令sed一个流编辑器,用于对文本进行筛选、查找、替换和处理。 首先,我们可以使用以下命令将整个文件内容输出,并将其存储在一个新文件中: ``` sed '1,$p' input.txt > output.txt ``` 这将把input.txt文件的内容输出并写入output.txt文件中。 接下来,我们可以使用echo命令将for循环语句附加到输出文件的末尾: ``` echo "for i in {1..10}; do" >> output.txt echo " # 这里是循环体" >> output.txt echo "done" >> output.txt ``` 这个for循环示例中,我们定义了一个变量i,该变量的取值范围是1到10。然后,在循环体中可以编写相应的代码。 最后,我们可以使用mv命令将output.txt文件重命名为input.txt,以使其成为原始文件的替代品: ``` mv output.txt input.txt ``` 现在,input.txt文件的末尾就添加上了for循环语句。 总结: 1. 使用sed命令将原始文件内容输出到一个新文件中。 2. 使用echo命令将for循环语句附加到输出文件的末尾。 3. 使用mv命令将输出文件重命名为原始文件,以替换原始文件。 这样,我们就成功地将for循环添加到了文件末尾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值