在UNIX中查找和替换

时间:2018-08-06 06:03:00

标签: sed

我在名为test.txt的文件中有以下字符串,

test.log test1.log test2.log

我想用

替换它
test.log -A test1.log -A test2.log

我尝试过:

sed -i 's/.log/.log -A/g' test.txt

但是输出是

test.log -A test1.log -A test2.log -A

我不希望将其附加在最后一个文件中。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

如果参数用空格分隔,并且该行中的最后一个参数后面没有空格,则可以使用以下方法:

$ cat ip.txt
test.log test1.log test2.log

$ sed 's/\.log /&-A /g' ip.txt
test.log -A test1.log -A test2.log
  • 由于.是一个元字符,因此您必须使用\.来从字面上进行匹配
  • 替换部分中的
  • &代表搜索部分中的整个匹配部分


您还可以在此处使用awk,它更适合于现场处理,并具有在行首/尾删除空白的优点。

$ awk -v OFS=' -A ' '/\.log/{$1=$1} 1' ip.txt
test.log -A test1.log -A test2.log
  • 默认输入字段分隔符(FS)是一个或多个连续的空格,因此无需进行设置
  • -v OFS=' -A '设置空格,后跟-A,并将空格作为输出字段分隔符(OFS)
  • /\.log/(如果行包含.log
    • $1=$1重新构建输入记录,以便将输入FS替换为OFS
  • 1惯用的方式来打印输入记录
  • 请注意,如果此解决方案不包含.log
  • ,则该行不会更改