用linux中的标签replace空格

如何在给定的文本文件中用linux中的标签replace空格?

使用unexpand(1)程序


UNEXPAND(1) User Commands UNEXPAND(1) NAME unexpand - convert spaces to tabs SYNOPSIS unexpand [OPTION]... [FILE]... DESCRIPTION Convert blanks in each FILE to tabs, writing to standard output. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -a, --all convert all blanks, instead of just initial blanks --first-only convert only leading sequences of blanks (overrides -a) -t, --tabs=N have tabs N characters apart instead of 8 (enables -a) -t, --tabs=LIST use comma separated LIST of tab positions (enables -a) --help display this help and exit --version output version information and exit . . . STANDARDS The expand and unexpand utilities conform to IEEE Std 1003.1-2001 (``POSIX.1''). 

我想你可以试试awk

 awk -v OFS="\t" '$1=$1' file1 

或SED,如果你preffer

 sed 's/[:blank:]+/,/g' thefile.txt > the_modified_copy.txt 

甚至tr

 tr -s '\t' < thefile.txt | tr '\t' ' ' > the_modified_copy.txt 

或Sam Bisbee所推荐的tr解决scheme的简化版本

 tr ' ' \\t < someFile > someFile 

使用Perl

 perl -p -i -e 's/ /\t/g' file.txt 

更好的tr命令:

 tr [:blank:] \\t 

这将清理说, unzip -l的输出,用于进一步处理grep,cut等。

例如,

 unzip -l some-jars-and-textfiles.zip | tr [:blank:] \\t | cut -f 5 | grep jar 

用于将当前目录下的每个.js文件转换为制表符的示例命令(仅前导空格被转换):

 find . -name "*.js" -exec bash -c 'unexpand -t 4 --first-only "$0" > /tmp/totabbuff && mv /tmp/totabbuff "$0"' {} \; 

下载并运行以下脚本以recursion方式将软标签转换为纯文本文件中的硬标签。

从包含纯文本文件的文件夹中放置并执行脚本。

 #!/bin/bash find . -type f -and -not -path './.git/*' -exec grep -Iq . {} \; -and -print | while read -r file; do { echo "Converting... "$file""; data=$(unexpand --first-only -t 4 "$file"); rm "$file"; echo "$data" > "$file"; }; done; 

你也可以使用astyle 。 我发现它非常有用,它也有几个选项:

 Tab and Bracket Options: If no indentation option is set, the default option of 4 spaces will be used. Equivalent to -s4 --indent=spaces=4. If no brackets option is set, the brackets will not be changed. --indent=spaces, --indent=spaces=#, -s, -s# Indent using # spaces per indent. Between 1 to 20. Not specifying # will result in a default of 4 spaces per indent. --indent=tab, --indent=tab=#, -t, -t# Indent using tab characters, assuming that each tab is # spaces long. Between 1 and 20. Not specifying # will result in a default assumption of 4 spaces per tab.` 

这将用一个空格replace连续的空格(但不是标签)。

  tr -cs '[:space:]'