【问题标题】:How to replace a specific number of characters in between two known characters?如何在两个已知字符之间替换特定数量的字符?
【发布时间】:2015-11-25 05:29:12
【问题描述】:

我有以下字符串:

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'

但没有运气。

【问题讨论】:

    标签: regex macos bash sed terminal


    【解决方案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}'
    

    【讨论】:

    • 假设我想转:awk 'BEGIN{FS=OFS="|"}{for(i=1;i 到函数 remove_na() 以便 bash remove_na_func.sh remove_na input_file.txt output_file.txt 将处理文本文件 input_file 和将结果保存在 output_file 中。关于最好的方法有什么建议吗?我实际上尝试过但无法让它工作。我需要这个,因为我需要在另一个程序中执行脚本来进行一些数据预处理。
    • awk '...' &lt;"$1" &gt;"$2" inside remove_na_func.sh 应该这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2018-02-04
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    相关资源
    最近更新 更多