我试图删除每行的第 6、7 和第 8 个字符。
下面是包含文本格式的文件。
实际输出..
#cat test
18:40:12,172.16.70.217,UP
18:42:15,172.16.70.218,DOWN
期待下面,格式化后。
#cat test
18:40,172.16.70.217,UP
18:42,172.16.70.218,DOWN
即使我在下面尝试过,也不走运
#awk -F ":" '{print $1":"$2","$3}' test
18:40,12,172.16.70.217,UP
#sed 's/^\(.\{7\}\).\(.*\)/\1\2/' test { Here I can remove only one character }
18:40:1,172.16.70.217,UP
即使有 cut 也失败了
#cut -d ":" -f1,2,3 test
18:40:12,172.16.70.217,UP
需要删除每行中的字符,如第 6、7、8
请多多指教
最佳答案
使用 GNU cut,您可以使用 --complement
开关删除字符 6 到 8:
cut --complement -c6-8 file
否则,您可以自己选择其余的字符:
cut -c1-5,9- file
即字符 1 到 5,然后是每行末尾的 9。
在 awk 中你可以使用子字符串:
awk '{ print substr($0, 1, 5) substr($0, 9) }' file
或者你可以写一个正则表达式,但结果会更复杂。
例如,要从第一个逗号分隔字段中删除最后三个字符:
awk -F, -v OFS=, '{ sub(/...$/, "", $1) } 1' file
或者,将 sed 与捕获组一起使用:
sed -E 's/(.{5}).{3}/\1/' file
捕获前 5 个字符并在替换中使用它们,删除接下来的 3 个。
关于Bash + sed/awk/cut 删除第 n 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49280300/