如何从第3位删除所有号码?作为地方,我试图从第三个字符引用。换句话说:
输入
a1 bcd3 efgh3029 2993
预期输出
a1 bcd efgh
到目前为止,我已经完成了RE:s/.[0-9]//g
。
答案 0 :(得分:1)
您可以在BASH中执行此操作:
s='a1 bcd3 efgh3029 2993'
p="${s:2}"
s="${s:0:2}${p//[0-9]/}"
echo "$s"
a1 bcd efgh
编辑您也可以使用awk
针对文件执行此操作
awk -v FS= '{printf "%s%s", $1, $2; p=substr($0, 3); gsub(/[[:digit:]]+/, "", p);
print p}' file
a1 bcd efgh
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed -r ':a;s/^(.{3}[^0-9]*)[0-9]+/\1/;ta' file
或者如果您愿意:
sed -r 's/.{3}/&\n/;h;s/[0-9]//g;G;s/.*\n(.*)\n(.*)\n.*/\2\1/' file
编辑:
第一个解决方案使用循环重复删除行中前三个字符后的数字字符。 :a
是一个循环占位符,在替换命令后,ta
命令会在成功时跳回到它
第二个解决方案使用“分而治之”方法,其中原始行的副本被制作并保存在保留空间(HS)中,原始行然后删除所有数字字符然后原始和副本使用原始行中的前三个字符和进程行中的其余字符将它们拼接在一起。
答案 2 :(得分:0)
这是解决问题的简单awk
:
awk '{for (i=3;i<=NF;i++) gsub(/[0-9]/,"",$i)}1' file
echo "a1 bcd3 efgh3029 2993" | awk '{for (i=3;i<=NF;i++) gsub(/[0-9]/,"",$i)}1'
a1 bcd3 efgh
如果要从第二个字段中删除号码,请执行以下操作:
echo "a1 bcd3 efgh3029 2993" | awk '{for (i=2;i<=NF;i++) gsub(/[0-9]/,"",$i)}1'
a1 bcd efgh
答案 3 :(得分:-1)
这是我的解决方案:
paste -d "" <(cut -c 1-2 input.txt) <(cut -c 3- input.txt | sed 's/[0-9]//g')
答案 4 :(得分:-2)
echo 'a1 bcd3 efgh3029 2993' |sed -r 's/[0-9]+//g'
你需要-r(regexp-extended)选项