所以我了解如何使用sed
,即使用通配符搜索时,.*
。我面临的问题是如何在命令的搜索和替换部分中两次使用通配符进行查找和替换。一个例子将有助于更好地说明这一点:
$cat test.txt
a(bc)
a(l)
a(d)
a(loke)
a(babab)
a(h323)
$
我想将一个字符串_mynewstring
, 附加到 后面的任何内容a([string of some length]
。请注意我不能简单地查找并替换右括号,因为每行中还有其他右括号(为了便于示例,我将其省略),但没有一个其配对的左括号前面有a
。输出应如下所示:
$cat test.txt
a(bc_mynewstring)
a(l_mynewstring)
a(d_mynewstring)
a(loke_mynewstring)
a(babab_mynewstring)
a(h323_mynewstring)
$
我尝试过以下方法,
sed -i 's/a(.*)/a(.*_mynewstring)/g' test.txt
但这只是输出,
cat test.txt
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
a(.*_mynewstring)
显然,通配符被视为文字字符串,这不是我需要的,但在详尽的谷歌搜索之后,我不确定我会如何做。我尝试使用awk
、grep
、 以及这三者的组合来解决方案,但没有成功。感谢您的任何帮助,您可以提供。
答案1
逃避 the(
并搜索 not )
。用于\1
保留匹配的分组。
sed 's/a\(([^)]*\))/a\1_mynewstring)/g' file1
给出:
a(bc_mynewstring)
a(l_mynewstring)
a(d_mynewstring)
a(loke_mynewstring)
a(babab_mynewstring)
a(h323_mynewstring)