删除字符,直到从数组项 Bash 中找到数字
Removing chars until a numeric is found from array item Bash
我在文本文件中有一行文本。该行看起来像这样:
xxxx,xxxxx,xxxxxx,xxxxx,xxxx,NL-1111 xx,xxxx,xxx
NL- 是国家/地区的标识符,因此可以是任何内容。我想从该行中删除 NL- 部分,使其看起来像这样:
xxxx,xxxxx,xxxxxx,xxxxx,xxxx,1111 xx,xxxx,xxx
然后写入文件。
提前致谢。
sed 可能会成功:从文件中的任何位置删除字符串“,NL-”、"BE-" 等:
sed -i 's/,[A-Z][A-Z]-/,/' file.txt
我认为这里最简单的解决方案是将它从文件中读取到一个 shell 变量中,然后立即将其写回并使用参数扩展的模式替换变体:
line="$(<file)"; echo "${line/[a-zA-Z][a-zA-Z]-}" >|file;
我会警告您不要使用 sed-in-place 功能的解决方案。我发现 sed 的行为在不同平台上与 -i 选项有关。在 Mac 上,您必须为 -i 选项提供一个空参数 (''
),而在 Cygwin 上,您必须 not 在 -i 之后有一个空参数.要获得平台兼容性,您必须测试您所在的平台。
像这样使用 sed
sed -i 's/,[A-Z][A-Z]-\([0-9]\+,\)/,/i' file.txt
,[A-Z][A-Z]-\([0-9]\+,\)
搜索逗号字母、字母、-
、数字、逗号
,
只保留逗号和数字。
i
忽略字母的大小写
感谢@chris 的校对。
另一个接近 sed
的解决方案,但使用 perl:
perl -i -pe "s/(?<=,)[a-zA-Z]{2}-//g" file.txt
使用look behind表达式,替换部分不需要重复逗号
我在文本文件中有一行文本。该行看起来像这样:
xxxx,xxxxx,xxxxxx,xxxxx,xxxx,NL-1111 xx,xxxx,xxx
NL- 是国家/地区的标识符,因此可以是任何内容。我想从该行中删除 NL- 部分,使其看起来像这样:
xxxx,xxxxx,xxxxxx,xxxxx,xxxx,1111 xx,xxxx,xxx
然后写入文件。
提前致谢。
sed 可能会成功:从文件中的任何位置删除字符串“,NL-”、"BE-" 等:
sed -i 's/,[A-Z][A-Z]-/,/' file.txt
我认为这里最简单的解决方案是将它从文件中读取到一个 shell 变量中,然后立即将其写回并使用参数扩展的模式替换变体:
line="$(<file)"; echo "${line/[a-zA-Z][a-zA-Z]-}" >|file;
我会警告您不要使用 sed-in-place 功能的解决方案。我发现 sed 的行为在不同平台上与 -i 选项有关。在 Mac 上,您必须为 -i 选项提供一个空参数 (''
),而在 Cygwin 上,您必须 not 在 -i 之后有一个空参数.要获得平台兼容性,您必须测试您所在的平台。
像这样使用 sed
sed -i 's/,[A-Z][A-Z]-\([0-9]\+,\)/,/i' file.txt
,[A-Z][A-Z]-\([0-9]\+,\)
搜索逗号字母、字母、-
、数字、逗号
,
只保留逗号和数字。
i
忽略字母的大小写
感谢@chris 的校对。
另一个接近 sed
的解决方案,但使用 perl:
perl -i -pe "s/(?<=,)[a-zA-Z]{2}-//g" file.txt
使用look behind表达式,替换部分不需要重复逗号