Unix搜索并替换与模式不匹配的字符串

时间:2014-08-20 15:13:43

标签: regex unix

例如

abcd |123 |234 |>?987 abc|erf
|urnch |<?utyf |poi 5423 one two lsk|

说我有一个像这样的字符串文件。 我想将管道(|)与其他一些特征相关,除了带有lessthan符号和问号|<?的管道。

结果: 如果我想用美元($)替换管道,那么结果应该是

abcd $123 $234 |>?987 abc$erf
$urnch |<?utyf $poi 5423 one two lsk$

除了具有|的字符串所有其他的桩都用美元取代。

2 个答案:

答案 0 :(得分:0)

通过perl,

$ perl -pe 's/(?:\|[<>]\?)(*SKIP)(*F)|\|/\$/g' file
abcd $123 $234 |>?987 abc$erf
$urnch |<?utyf $poi 5423 one two lsk$

另一个哎,

$ perl -pe 's/(?!\|[<>]\?)\|/\$/g' file
abcd $123 $234 |>?987 abc$erf
$urnch |<?utyf $poi 5423 one two lsk$

答案 1 :(得分:-1)

您也可以使用此正则表达式而不会出现负面前瞻:

\|([^<>])

使用此替换文字:

$$1

Working Demo