sed - 在 UNIX 中查找和替换
问题描述
我在一个名为的文件中有以下字符串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
我不希望将其附加到最后一个文件中。有人可以帮我吗?
解决方案
如果参数由空格分隔,并且行中的最后一个参数后面没有空格,则可以使用:
$ 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
推荐阅读
- html - 带有tailwindcss的侧边栏网格
- gremlin - Gremlin.Net,如何进行左外连接?
- python - pyorient 查询引发“ struct.error: required argument is not an integer”
- amazon-s3 - 在 cloudflare 工作人员中使用 aws4fetch 包调用 AWS api?
- v8 - 预加载器 V8 无服务器
- python - 模糊正则表达式:替换的模糊计数始终为 1
- javascript - 如何在 React 中使用 map 函数显示对象数组中的图像链接?
- flutter - RenderFlex 子级具有非零弹性,但传入的高度约束是无界的
- python - 根据一行中的关键字将csv分成几部分,然后转置
- python - pyspark concat_ws 用于数组到字符串