我在名为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
我不希望将其附加在最后一个文件中。有人可以帮我吗?
答案 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
-v OFS=' -A '
设置空格,后跟-A
,并将空格作为输出字段分隔符(OFS)/\.log/
(如果行包含.log
$1=$1
重新构建输入记录,以便将输入FS替换为OFS 1
惯用的方式来打印输入记录.log