我试图在文件中删除每行的中间.所有的行都是这样的:
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切掉标签和两位数字?
谢谢你的帮助.
根据您的输入和预期输出,这可能是一种方式:
$ 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)
无需调用外部程序(如sed或 )cut或其他语言(如 )awk,bash可以为您做到这一点:
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。