删除字符,直到从数组项Bash中找到数字

时间:2015-01-14 08:14:06

标签: bash

我在文本文件中有文本行。该行看起来像这样:

xxxx,xxxxx,xxxxxx,xxxxx,xxxx,NL-1111 xx,xxxx,xxx

NL-是国家的标识符,所以这可以是任何东西。我想从线上删除NL部分,所以它看起来像这样:

xxxx,xxxxx,xxxxxx,xxxxx,xxxx,1111 xx,xxxx,xxx

然后写完文件。

提前致谢。

4 个答案:

答案 0 :(得分:2)

我认为这里最简单的解决方案是将其从文件中读取到shell变量中,然后立即将其写回并使用参数扩展的模式替换变体:

line="$(<file)"; echo "${line/[a-zA-Z][a-zA-Z]-}" >|file;

我会警告你不要使用sed-in-place功能的解决方案。我发现sed行为在-i选项的不同平台上有所不同。在Mac上你必须给-i选项一个空参数(''),而在Cygwin上你必须在-i之后有一个空参数。为了获得平台兼容性,您必须测试自己所处的平台。

答案 1 :(得分:2)

使用sed

这样的事情
sed -i 's/,[A-Z][A-Z]-\([0-9]\+,\)/,\1/i' file.txt 

,[A-Z][A-Z]-\([0-9]\+,\)搜索逗号,字母,-,数字,逗号

,\1只保留逗号和数字。

i忽略字母上的案例

感谢@chris进行校对。

答案 2 :(得分:2)

另一个接近sed的解决方案,但使用perl:

perl -i -pe "s/(?<=,)[a-zA-Z]{2}-//g" file.txt

它使用了后面的表达式,因此您不需要在替换部分中重复逗号。

答案 3 :(得分:1)

sed可能会做到这一点:从文件中的任何位置删除字符串“,NL-”,“BE-”等:

sed -i 's/,[A-Z][A-Z]-/,/' file.txt