在shell中使用sed

时间:2014-03-15 08:01:56

标签: shell sed

我需要在shell中使用sed来在文件中执行以下操作:

1)假设我有一条线:

#listen_tcp = 1

我想删除第一个字符#

2)假设我有一条线:

#listen_tcp = 1

我想更改为上一个字符10

3)假设我有一条线:

#listen_tcp

我想将其附加到#listen_tcp = 1

4)假设我有一条线:

libvirtd_opts="-d"

我想在libvirtd_opts="-d -l"

中插入一些内容

5)假设我有一条线:

tcp_port = "16059"

我只想将其更改为tcp_port = "16509"

如何使用sed在文本文件中执行所有操作?我只知道如何用整行来重新表达它。例如,我将打开文件并记住单词行,然后使用sed s/a/b/g将b替换为a。这是我最好的知识,我想知道是否有更好的方法来实现这一目标?例如,按关键字搜索该行并替换此行的一部分?

1 个答案:

答案 0 :(得分:1)

1)

echo "#listen_tcp = 1" | sed '/listen/s/#//g'
listen_tcp = 1

2)

echo "#listen_tcp = 1" | sed '/listen/s/1/0/g'
#listen_tcp = 0

3)

echo "#listen_tcp" | sed 's/#listen_tcp/& = 1/g'
#listen_tcp = 1

For 4)

echo 'libvirtd_opts="-d"' | sed 's/libvirtd_opts="-d/& -l/g'
libvirtd_opts="-d -l"

对于5)

echo 'tcp_port = "16059"' | sed '/tcp_port/s/16059/16509/g'
tcp_port = "16509"