BASH:grep字符并替换为相同的加号选项卡

BASH:grep字符并替换为相同的加号选项卡,bash,shell,unix,grep,Bash,Shell,Unix,Grep,基本上,我只需要用一个标签替换两个空格;以下是查询: abc def ghi K00001 jkl 所有列由一个选项卡分隔;K00001 jkl由两个空格分隔。但是我希望这两个空格被一个标签代替。 我不能只grep所有两个空格,因为其他内容必须保留空格,它们应该保留 我的方法是grep: grep '[0-9][0-9][0-9][0-9][0-9] ' file 但我想替换它,使其具有相同的K00001jkl 如何用相同的字符串替换?我可以使用变量来存储grep结果,然后用相同的字符串

基本上,我只需要用一个标签替换两个空格;以下是查询:

abc def ghi K00001  jkl
所有列由一个选项卡分隔;
K00001 jkl
由两个空格分隔。但是我希望这两个空格被一个标签代替。 我不能只grep所有两个空格,因为其他内容必须保留空格,它们应该保留

我的方法是
grep

grep '[0-9][0-9][0-9][0-9][0-9]  ' file
但我想替换它,使其具有相同的
K00001jkl

如何用相同的字符串替换?我可以使用变量来存储grep结果,然后用相同的字符串打印修改后的(制表符而不是空格)吗

sed -r "s/([A-Z][0-9]{5})  /&\t/" File 

例如:

AMD$ echo "abc def ghi K00001  jkl" | sed -r "s/([A-Z][0-9]{5})  /&\t/"
abc def ghi K00001      jkl

您可以使用此
sed

sed -E $'s/([^[:blank:]]) {2}([^[:blank:]])/\\1\t\\2/g' file

Regex
([^[:blank:]]){2}([^[:blank:]])
确保匹配由两个非空格字符包围的两个空格。作为替代,我们使用返回引用将周围的字符放回
\1
\2

我将使用awk,因为对于awk,无论字段是否由一个-两个或多个空格分隔,我都可以使用制表符强制输出:

$ echo "abc def ghi K00001  jkl" |awk -v OFS="\t" '{$1=$1}1'
abc     def     ghi     K00001  jkl

像这样的
echo-e'aa\tbb\tcc dd'| sed's/\s\s/\t/'
不能将所有两个空格都变灰,因为其他内容必须保留空格。
您如何将
其他内容与实际内容区分开来?
$ echo "abc def ghi K00001  jkl" |awk -v OFS="\t" '{$1=$1}1'
abc     def     ghi     K00001  jkl