这种格式的txt
"service blabla 1" 5.456
"service blabla 2" 456
Run Code Online (Sandbox Code Playgroud)
我只需要删除“”之间的空白空间
"serviceblabla1" 5.456
"serviceblabla2" 456
Run Code Online (Sandbox Code Playgroud)
我有这个命令
sed 's/ //g'
结果:
"serviceblabla2"456
Run Code Online (Sandbox Code Playgroud)
在awk带有显示示例的GNU中,请尝试以下awk代码。
awk -v RS='"[^"]*"' '{gsub(/[[:space:]]+/,"",RT);ORS=RT} 1' Input_file
Run Code Online (Sandbox Code Playgroud)
说明:设置RS为"[^"]*"从中获取值",直到下一处"。然后删除其值中的空格以匹配 OP 的要求。最后打印线。
上面的代码将在终端上打印数据,如果您想就地保存到 Input_file 中,请尝试以下命令。
awk -v RS='"[^"]*"' '{gsub(/[[:space:]]+/,"",RT);ORS=RT} 1' Input_file > temp && mv temp Input_file
Run Code Online (Sandbox Code Playgroud)
您可以在这里使用perl:
perl -i -pe 's{"[^"]*"}{$&=~s|\s+||gr}ge' file
Run Code Online (Sandbox Code Playgroud)
请注意,这-i将替换内联文本。
该"[^"]*"模式将匹配最接近的双引号之间的任何子字符串,并且$&=~s|\s+||gr仅删除匹配项内的一个或多个空白字符的所有块。
查看在线演示:
#!/bin/bash
s='"service blabla 1" 5.456
"service blabla 2" 456'
perl -pe 's{"[^"]*"}{$&=~s|\s+||gr}ge' <<< "$s"
Run Code Online (Sandbox Code Playgroud)
输出:
"serviceblabla1" 5.456
"serviceblabla2" 456
Run Code Online (Sandbox Code Playgroud)