我试图用bash替换fil中单引号之间的单词,我尝试使用sed但它不起作用。
文件内容
Haarlem -m 'foo' -n 'bar' aalsmeer > "goes to" -t 'value'
Roterdam -m 'foo2' -n 'bar2' amsterdam > "goes to" -t 'value'
预期产量
Haarlem -m "verified" -n "verified" aalsmeer > "goes to" -t 'value'
Roterdam -m "verified" -n "verified" amsterdam > "goes to" -t 'value'
我下面的sed命令不起作用
sed 's/-m '*.*' -n '*.*'/-m "verified" -n "verified"/'
您可以在此处使用双引号:
$ sed "s/'[^']*'/\"verified\"/g" ip.txt
Haarlem -m "verified" -n "verified" aalsmeer > "goes to"
Roterdam -m "verified" -n "verified" amsterdam > "goes to"
'[^']*'
匹配'
后跟非'
字符,然后再是'
字符
'.*'
,因为这将首先匹配'
到最后'
输入线\"verified\"
使用"verified"
作为替换字符串,双引号被转义,因为它是被双引号内使用另请参见:https : //mywiki.wooledge.org/Quotes,为什么我的正则表达式在X中起作用而在Y中不起作用?(用于正则表达式和通配符之间的差异)
上述解决方案后,问题已更新。
$ cat ip.txt
Haarlem -m 'foo' -n 'bar' aalsmeer > "goes to" -t 'value'
Roterdam -m 'foo2' -n 'bar2' amsterdam > "goes to" -t 'value'
$ sed -E "s/(-[mn] )'[^']*'/\1\"verified\"/g" ip.txt
Haarlem -m "verified" -n "verified" aalsmeer > "goes to" -t 'value'
Roterdam -m "verified" -n "verified" amsterdam > "goes to" -t 'value'
-[mn]
将匹配-m
或-n
(-[mn] )
是一个捕获组,匹配的内容将在替换部分中重用为 \1
您也可以使用
sed -E "s/(-[^t] )'[^']*'/\1\"verified\"/g" ip.txt
防止仅-t '..'
被替换并匹配所有其他单引号之前的模式-<char>
和一个空格
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句