我这里没有代码示例,因为我根本不知道如何执行此操作,但我有一个文件.合法的空行是仅包含换行符的行.空格或标签是非法的.
如何检查线路是否"合法空"?
如果它没有任何单词(我可以查看wc -w),我如何检查它是否没有空格或标签,只是换行?
所以我尝试过这样的事情:
while read line; do
if [[ "$line" =~ ^$ ]]; then
echo empty line
continue
fi
done < $1
Run Code Online (Sandbox Code Playgroud)
但它不起作用.如果我在一个空行中放一个"",它仍然认为它是空的.
如果你想要那些空行的行号:
perl -lne 'print $. if(/^$/)' your_file
Run Code Online (Sandbox Code Playgroud)
如果你想删除没有Perl的那些行:
grep . your_file >new_file
Run Code Online (Sandbox Code Playgroud)
如果要使用Perl删除那些空行:
perl -i -lne 'print if(/./)' your_file
Run Code Online (Sandbox Code Playgroud)
术语:仅包含空格的行是空行。不包含任何内容(换行符除外)的行是空行。
该read内置剥去开头和结尾的空白。因此,如果遇到空行,它会将其参数设置为空字符串,而不管空格的数量。为了避免这种行为并返回未修改的输入行,请将字段分隔符设置为空(默认情况下,它们是空格、制表符和换行符):将IFS变量设置为空字符串。请参阅为什么while IFS= read如此频繁地使用,而不是IFS=; while read..? 以获得更详细的解释。在此过程中,将-r选项传递给read,除非您希望反斜杠换行序列成为行的延续。
while IFS= read -r line; do
if [ -z "$line" ]; then
echo empty line
fi
done <"$1"
Run Code Online (Sandbox Code Playgroud)
如果要判断一行是否为空:
while IFS= read -r line; do
case "$line" in
'') echo "empty line";;
*[![:space:]]*) echo "non-blank line";;
*) echo "non-empty blank line";;
esac
done <"$1"
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以使用 Bash 正则表达式匹配:
while IFS= read -r line; do
if [[ "$line" =~ ^$ ]]; then
echo "empty line"
elif [[ "$line" =~ ^[[:space:]]+$ ]]; then
echo "non-empty blank line"
else
echo "non-blank line"
fi
done <"$1"
Run Code Online (Sandbox Code Playgroud)
这些也可以通过模式匹配来完成(使用 shell 通配符,它的语法与常见的正则表达式不同):
while IFS= read -r line; do
if [[ "$line" == "" ]]; then
echo "empty line"
elif [[ "$line" != *[![:space:]]* ]]; then
echo "non-empty blank line"
else
echo "non-blank line"
fi
done <"$1"
Run Code Online (Sandbox Code Playgroud)
如果您只想在文件中查找空行并且不以任何其他方式处理这些行,您可以使用 grep:
if grep -qxF '' <"$1"; then
echo "$1 contains an empty line"
fi
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找非空的空行:
if grep -Ex '[[:space:]]+' <"$1"; then
echo "$1 contains a non-empty blank line"
fi
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式检查空行
^$
Run Code Online (Sandbox Code Playgroud)
^是一行的开头,$是一行的结尾,上面如果没有其他字符,则上面的正则表达式匹配。
您现在可以在例如sed中使用它
sed '/^$/d' input.txt
Run Code Online (Sandbox Code Playgroud)
这将从输入文件中删除所有空行。
这将从文件中删除空行并在控制台上显示文件内容。该文件仍然保持不变。
如果要从文件中删除空行(即更改文件内容),请运行:
sed -i '/^$/d' input.txt
Run Code Online (Sandbox Code Playgroud)