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