检查文件中的空行

lit*_*way 3 unix bash file

我这里没有代码示例,因为我根本不知道如何执行此操作,但我有一个文件.合法的空行是仅包含换行符的行.空格或标签是非法的.

如何检查线路是否"合法空"?

如果它没有任何单词(我可以查看wc -w),我如何检查它是否没有空格或标签,只是换行?

所以我尝试过这样的事情:

while read line; do
    if [[ "$line" =~ ^$ ]]; then
        echo empty line
        continue
    fi
done < $1
Run Code Online (Sandbox Code Playgroud)

但它不起作用.如果我在一个空行中放一个"",它仍然认为它是空的.

Vij*_*jay 6

如果你想要那些空行的行号:

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)


Gil*_*il' 5

术语:仅包含空格的行空行。不包含任何内容(换行符除外)的行是空行

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)


pfn*_*sel 4

检查空行

^$
Run Code Online (Sandbox Code Playgroud)

^是一行的开头,$是一行的结尾,上面如果没有其他字符,则上面的正则

中使用它

sed '/^$/d' input.txt
Run Code Online (Sandbox Code Playgroud)

这将从输入文件中删除所有空行。 这将从文件中删除空行并在控制台上显示文件内容。该文件仍然保持不变。

如果要从文件中删除空行(即更改文件内容),请运行:

sed -i '/^$/d' input.txt
Run Code Online (Sandbox Code Playgroud)