如何在两个已知字符之间替换特定数量的字符?

时间:2015-11-25 05:29:13

标签: regex macos bash sed terminal

我有以下字符串:

NA.|NA.|the NA. company|theNAcompany|2.7737|1.4874|NA|NA|NA

在OSX中使用sed命令,我需要替换字符之间的所有NA有,比方说,FOO。只有|之间的字符仅包含NA的替换。因此,正确的结果将是

NA.|NA.|the NA. company|theNAcompany|2.7737|1.4874|FOO|FOO|FOO

其中“NA。”单独留下。

到目前为止,我已经尝试过:

sed -e 's/[?<=\|](NA)[?=\|]/FOO/g'
sed 's/\|NA\|/\|FOO\|/g'

但没有运气。

1 个答案:

答案 0 :(得分:1)

sed没有前瞻,更不用说了。使用更强大的工具。

echo "NA.|NA.|the NA. company|theNAcompany|2.7737|1.4874|NA|NA|NA" |\
perl -pne "s/(\||^)NA(?=\||$)/\1FOO/g"

echo "NA.|NA.|the NA. company|theNAcompany|2.7737|1.4874|NA|NA|NA" |\
awk 'BEGIN{FS=OFS="|"}{for(i=1;i<=NF;i++)if($i=="NA")$i="FOO";print}'