如何使用bash删除“”之间的空白空间

moh*_*med 9 regex awk sed

这种格式的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)

Rav*_*h13 6

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)


Wik*_*żew 4

您可以在这里使用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)