【问题标题】:Unable to delete apostrophe using SED command on text file无法在文本文件上使用 SED 命令删除撇号
【发布时间】:2020-06-19 17:13:40
【问题描述】:

我正在尝试从文本文件中提取数字,并且一直在使用 SED 命令删除不需要的字符。但是,我无法删除杂散的撇号。

这是示例文本:

CLASSES                                            SCORES
[u'Precipitate', u'Crystals', u'Other', u'Clear']  [0.8788071274757385, 0.050357233732938766, 0.038349077105522156, 0.03248654305934906]

这是想要的结果:

0.8788071274757385, 0.050357233732938766, 0.038349077105522156, 0.03248654305934906

这是我正在使用的代码:

echo running

sed -i '/^CLASSES/ d' ~/Desktop/testgcloud/results.txt
sed -i -e "s/Precipitate//g" -e "s/Other//g" -e "s/Crystals//g" -e "s/Clear//g" -e "s/u//g" ~/Desktop/testgcloud/results.txt
sed -i -e "s/\[//g" -e "s/\]//g" -e "s/\'//g" ~/Desktop/testgcloud/results.txt

echo finished running

这是代码的结果:

'', '', '', ''  0.8788071274757385, 0.050357233732938766, 0.038349077105522156, 0.03248654305934906

另外,有没有办法删除每行的前四个逗号?

【问题讨论】:

    标签: bash sed


    【解决方案1】:
    sed -i.bkp -e '/^CLASSES/d' -e 's/^\[[^]]*\]\s\+\[//' -e 's/\]$//' sample.txt
    
    • -e 's/^\[[^]]*\]\s\+\[//' - 删除第一组[]、周围的[] 和下一个[ - demo 中的所有内容(注意sed 使用\+ 而不是+,但其余部分相同)
    • -e 's/\]$//' - 删除尾随 ]

    【讨论】:

      【解决方案2】:

      与其删除不想要的东西,不如专注于自己想要的东西。

      grep -Po '([0-9]+\.[0-9]+,? ?)+' input_file > ~/Desktop/testgcloud/results.txt

      这将写入匹配模式的结果文件内容:至少一个数字、十进制、至少一个数字和一个可选的逗号和空格。似乎只需一步即可解决您的问题。

      如果您真的使用 sed,以下内容将删除空撇号以及可选的逗号和空格。

      sed "s/'',\? \?//g"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-07
        • 2020-10-20
        • 1970-01-01
        • 2014-09-12
        • 2011-01-07
        相关资源
        最近更新 更多