如何用一个tab替换多个空格

use*_*own 33 linux bash text-manipulation

我有一些文本文件,其中包含一些由不同数量的空格分隔的列,但我需要一个单独的选项卡作为分隔符。可以在 Bash 中做吗?

Den*_*son 39

要将多个空格的序列转换为制表符,但单独保留单个空格

sed 's/ \+ /\t/g' inputfile > outputfile
Run Code Online (Sandbox Code Playgroud)

要对多个文件执行此操作:

for inputfile in *
do
    sed 's/ \+ /\t/g' "$inputfile" > tmpfile && mv tmpfile "$inputfile"
done
Run Code Online (Sandbox Code Playgroud)

或者

for inputfile in *
do
    sed -i.bak 's/ \+ /\t/g' "$inputfile"
done
Run Code Online (Sandbox Code Playgroud)

或者

find . -type f -exec sed -i.bak 's/ \+ /\t/g' {} \;
Run Code Online (Sandbox Code Playgroud)


小智 8

如果您的角色是多个标签,您还可以使用tr -s

-s, --squeeze-repeats   replace each input sequence of a repeated character
                        that is listed in SET1 with a single occurrence
Run Code Online (Sandbox Code Playgroud)

例如:

my_file.txt | tr -s " "
Run Code Online (Sandbox Code Playgroud)

所有的空白都将合而为一。


Iva*_*azy 5

您可以使用sed制表符替换多个空格。:

用一个制表符替换一个或多个空格的示例:

cat spaced-file | sed 's/ \+/\t/g' > tabbed-file
Run Code Online (Sandbox Code Playgroud)