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 | |
-i 选项用于直接修改原文件。
2. 删除file.txt第4行及之后的所有行
1 | |
$表示文件的最后一行。