从Bash中的行中删除中间的n个字符

Fel*_*xia 4 unix bash cut sed

我试图在文件中删除每行的中间.所有的行都是这样的:

79.472850   97 SILENCE 
Run Code Online (Sandbox Code Playgroud)

我需要最终得到:

79.472850 SILENCE
Run Code Online (Sandbox Code Playgroud)

由于每一行都有不受欢迎的部分从字符10开始到字符14结束,我试图以这种方式使用sed:

sed "s/\(.\{9\}\).\{6\}//"但我最终得到了字符14之后的所有内容.每个文件中标签空间后面的数字都会发生变化.我该怎么做才能使sed切掉标签和两位数字?

谢谢你的帮助.

fed*_*qui 8

根据您的输入和预期输出,这可能是一种方式:

$ echo "79.472850   97 SILENCE" | tr -s " " | cut -d" " -f1,3
79.472850 SILENCE
Run Code Online (Sandbox Code Playgroud)
  • tr -s " " 删除重复的空格.
  • cut -d" " -f1,3 根据空格分割打印第1和第3字段.

sed:

$ sed 's#\([^ ]*\)[ ]*\([^ ]*\)[ ]*\([^ ]*\)#\1 \3#g' <<< "79.472850   97 SILENCE"
79.472850 SILENCE
Run Code Online (Sandbox Code Playgroud)


cda*_*rke 6

无需调用外部程序(如sed或 )cut或其他语言(如 )awkbash可以为您做到这一点:

var="79.472850   97 SILENCE"
echo ${var:0:9}${var:14}
79.472850 SILENCE
Run Code Online (Sandbox Code Playgroud)

${var:0:9}从位置 0(文本开头)开始复制 9 个字符。

${var:14}从字符位置 14 复制到文本末尾。

或者,如果它是空格分隔的字段,您需要:

read one two three <<< "$var"
echo "$one $three"
79.472850 SILENCE
Run Code Online (Sandbox Code Playgroud)

同样,它使用纯 bash。