![如何从输入文件中删除空格?](https://linux22.com/image/184308/%E5%A6%82%E4%BD%95%E4%BB%8E%E8%BE%93%E5%85%A5%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%A0%E9%99%A4%E7%A9%BA%E6%A0%BC%EF%BC%9F%20.png)
输入文件示例:
abcd
<Space>
1234
<Space>
期望的输出:
abcd
1234
答案1
通过它
sed '/^[[:blank:]]*$/d'
此sed
命令删除所有空行或仅包含空格和/或制表符的行。正则表达式^[[:blank:]]*$
匹配空行,尾随d
是sed
删除它们的编辑命令。
例如:
sed '/^[[:blank:]]*$/d' <file >newfile
该文件newfile
将是file
删除了空行的编辑变体。
或者,仅输出包含非空白字符的行:
sed -n '/[^[:blank:]]/p' <file >newfile
这将打印至少包含一个非空格或制表符的每一行。其余行将被忽略。选项-n
禁用sed
每行的默认输出,尾部p
是sed
输出当前行的命令(如果它与前面的正则表达式匹配)。
答案2
如果您想删除仅包含空格的行以及空行:
grep '[^ ]' # ie, match any lines with at least 1 char different from space
或者 :
grep -v '^ *$' # ie, hide lines that only contain spaces (0 or n spaces, ie empty lines as well)
如果您还想删除空行或仅包含“制表符或空格”的行
grep -v "^[ $(printf '\t')]*$"
答案3
基于强制awk
的解决方案:
awk 'NF' input.txt
这只会打印awk
检测到至少一个“字段”的行(即字段计数器NF
非零)。请注意,这也会删除空行,因为它们只包含空格。