使用 sed 可以实现这个吗?
我实际上是在 iTunes 中使用“使用 sed 编辑曲目名称”Doug 的脚本,我有一组曲目,它们的标题有两种:
Identical string - Identical string
或者
Some string - some different string
在第一种情况下,我想删除其中一个相同的字符串和中间的字符串-
,这样就只剩下“相同字符串”的一次迭代。如果字符串不同(第二种情况),我想保留它。
我试过了s/^(.*) - $1/$1/
,但似乎无法匹配我刚刚定义的组。s/^(.*) - (.*)/$1/
显然,对于第一种情况有效,但对于第二种情况会错误处理。有没有使用我提到的工具的其他方法来解决这个问题?
答案1
你能引用您刚刚定义的组,但为此sed
使用\n
,而不是$n
。此外,使用 进行分组(
)
仅在“扩展”模式下有效(使用选项启用-r
):
sed -r 's/^(.+) - \1/\1/'
在“基本”模式下,您可以使用:
sed 's/^\(.*\) - \1/\1/'
答案2
这是可行的,gnuwin32 sed。GNU sed 4.2.1
C:\tes>echo ident - ident | sed -r "s/^(.*) - \1 /z/"
z
C:\tes>echo ident - idrnt | sed -r "s/^(.*) - \1 /z/"
ident - idrnt
C:\tes>echo ident - ident | sed -r "s/^(.*) - \1 /\1/"
ident
C:\tes>echo ident - idevt | sed -r "s/^(.*) - \1 /\1/"
ident - idevt
C:\tes>