222bbb:sed

1.sed替换特定行的字符串

文本内容如下:
aaa bbb ccc 111 222 abc
eee fff ggg 111 222 efg
111 222
aaa ccc ddd 111 222 acd

需求:
在有aaa的行中,将 111 替换为 AAA,将 222 替换为 BBB
即,输出结果为:
aaa bbb ccc AAA BBB abc
eee fff ggg 111 222 efg
111 222
aaa ccc ddd AAA BBB acd

方法如下:
sed -i '/aaa/ { s/111/AAA/g;  s/222/BBB/g; }'  filename
把某个用户注销掉:
sed -i '/shaoping/ { s/\/bin\/bash/\/sbin\/nologin/g; }' /etc/passwd

 

2.在文档中 增加一行 或 删除一行

有时候我们会用脚本,来修改文档,比如在文档中增加一行或减少一行
echo "1";
echo "2";
echo "4";
echo "5";

如上例子,想要在echo "2";后面加上一条echo "3";可以用如下命令

sed -i '/echo \"2\";/a\echo \"3\";' test.sh

 

之所以用分号,是因为文本中本来就有。也就是说分号不是必须的!

抽象出来就是: sed -i '/* /a*' filename

 

Linux shell脚本 删除文件中的一行内容

比如:在1.txt里有以下内容:
HELLO=1
NI=2
WORLD=3
I Love China.
Love all
....

如果是要删除第三行:
sed -i '3d' 1.txt

如果删除以Love开头的行
sed -i '/^Love/d' 1.txt

删除包含Love的行
sed -i '/Love/d' 1.txt

 

一、在某行的前一行或后一行添加内容
具休操作如下:

#匹配行前加

而在书写的时候为便与区分,往往会在i和a前面加一个反加一个反斜扛 。代码就变成了:


这就就可以很方便的看出要在某一行前或某一行后加入什么内容 。不过经常我记不住a 、i 那个是前那个是后。我的记法是a = after ,i = in front 。这样就知道 i 是前,a 是后了。不过官方的man文件里不是这样解释的,man文件里是这样解释的:


而且其可以配合find查找的内容处理,如下:


二、在某行(指具体行号)前或后加一行内容

这里指定的行号是第四行 。

三、删除指定行的上一行或下一行

这个写起来有点长,一般如果不是shell里的需要,我更喜欢用vim去处理。另外需要注意的是,在vim里如果替换的内容里tab这样的符号是需要在编辑模式下分别按ctrl+v 和crtl+I ,而不是不停的几个空格

 

使用地址范围。

1. 删除file.txt的1~3行

1

sed -i '1,3d' file.txt

-i 选项用于直接修改原文件。

 

2. 删除file.txt第4行及之后的所有行

1

sed -i '4,$d' file.txt

$表示文件的最后一行。

 

 

相关推荐

相关文章