Bash + sed/awk/cut 删除第 n 个字符

标签 bash awk sed

我试图删除每行的第 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/

相关文章:

php - 为什么我的 PHP cron 脚本不播放声音?

linux - 如何为每个结果调用一个命令?

linux - 使用bash脚本获取当前目录的第二个根文件夹

linux - 如何在 linux 的日志文件中获取时间范围?

php - Linux SED 搜索每行替换多个

linux - 用每一行的用户输入替换文件中的某些字段并保存在同一个文件中

regex - grep 多个模式单文件参数列表太长

bash - 将包含反斜杠的字符串读入 bash 中的变量

awk - 删除第一次和最后一次出现列值的行

sed - 在 sed -f 中使用变量(其中 sed 脚本在文件中而不是内联)