需要一个sed命令来替换表达式的中间部分

时间:2014-09-11 10:15:10

标签: bash sed

我正在寻找一个允许移动的sed表达式:

expression1\expression2\expression3

expression1\expression3

和ofcourse expression2在我需要执行命令的所有文件中都是不同的。

现在我的解决方案是专注于expression2之间的两个'\',但我找不到正则表达式来匹配2个已知字符之间的任何单词。

有任何想法一次性这样做吗?

2 个答案:

答案 0 :(得分:3)

您可以尝试使用以下sed命令将\(包括\)中的所有字符替换为\

$ echo 'expression1\expression2\expression3' | sed 's~\\.*\\~\\~g'
expression1\expression3
$ echo 'expression1\expression2\expression3' | sed 's~\\[^\\]*\\~\\~g'
expression1\expression3

答案 1 :(得分:1)

您可以使用awk:

s='expression1\expression2\expression3'
awk 'BEGIN{FS=OFS="\\"} {print $1, $3}' <<< "$s"
expression1\expression3

使用sed:

sed 's~^\([^\\]*\)\\[^\\]*\(\\.*\)$~\1\2~' <<< "$s"
expression1\expression3