如何删除文本文件中前面的空格?

如何删除文本文件中前面的空格?

我有一个文本文件,行前有一个空格。如何使用tr(或正确的命令)删除它?

例如,我有这个:

 Text

我想要这个:

Text   

但是,我该如何处理 200 行的文本文件呢?

我目前有这个管道:

cat file.txt | tr -s " " | tr -d "," 

其他tr命令用于删除文本文件的其他方面。

答案1

这应该可以完成这项工作:

sed -e 's/^ //' -e 's/,//g' file.txt

向命令sed(流编辑器)传递两个命令以按顺序执行,两个命令都用无替代有,即删除一部分输入。

第一个命令删除行首后面的空格,注意^,第二个命令删除逗号,其效果与你的tr -d ","命令完全相同。

感谢 minerz029 间接提醒我,我漏掉了“g”,因为我的第一个回复只是删除了每行中第一个逗号。

答案2

sed -e 's/^ //g' -e 's/,//g' file.txt

解释:

第一个脚本 ( s/^ //g) 是将所有前导空格替换为空(删除)。
第二个脚本 ( s/,//g) 是将所有逗号替换为空(删除)。

答案3

Bash 有一种使用while IFS= read -r ; do . . . done < input.txt结构 来打印文件确切内容的方法,但这里的一个特殊功能是,如果省略IFS=,则不会读取前导空格。因此,我们可以执行以下操作:

$ cat input.txt
 Text
$ while read -r line; do printf "%s\n" "$line"; done < input.txt                                                         
Text

要替换原始文件的文本,可以稍微修改命令,如下所示:

$ cat input.txt
 Text
$ while read -r line; do printf "%s\n" "$line"; done < input.txt > temp.txt ; mv temp.txt input.txt                      
$ cat input.txt
Text

我们也可以使用参数扩展来删除逗号

$ cat input.txt                                                                                                          
 Text, text,
$ while read -r line; do printf "%s\n" "${line//,}"; done < input.txt                                                    
Text text

tr -s" "printf也可以通过稍微修改来模拟

$ cat input.txt                                                                                                          
 Text,     text,
$ while read -r line; do printf "%s " ${line//,};printf "\n"; done < input.txt                                           
Text text 

相关内容