Linux 使用sed从管道中删除空管 我试了许多方法来去掉空行。(#3在输出中)。但我不太明白

Linux 使用sed从管道中删除空管 我试了许多方法来去掉空行。(#3在输出中)。但我不太明白,linux,bash,unix,git-bash,Linux,Bash,Unix,Git Bash,我需要把最后一行输入变量 下面我正在使用的实际命令无法给出输出 $ find ~/AppData/Local/atom/ -name atom.sh -type f | grep -FzZ 'cli/atom.sh' | sed '/^\s*$/d' | cat -n 1 /c/Users/devuser/AppData/Local/atom/app-1.12.1/resources/cli/atom.sh 2 /c/Users/devuser/AppData/Local

我需要把最后一行输入变量

下面我正在使用的实际命令无法给出输出

$ find ~/AppData/Local/atom/ -name atom.sh -type f | grep -FzZ 'cli/atom.sh' | sed '/^\s*$/d' | cat -n
     1  /c/Users/devuser/AppData/Local/atom/app-1.12.1/resources/cli/atom.sh
     2  /c/Users/devuser/AppData/Local/atom/app-1.12.2/resources/cli/atom.sh
     3

下面的sed命令将删除所有空行

 find ~/AppData/Local/atom/ -name atom.sh -type f | grep -FzZ 'cli/atom.sh' | sed '/^$/d' | tail -n 1


下面的sed命令将删除所有空行以及只有空格的行

sed '/^$/d' file
添加
-i
参数以进行就地编辑

sed '/^[[:blank:]]*$/d' file

下面的sed命令将删除所有空行

 find ~/AppData/Local/atom/ -name atom.sh -type f | grep -FzZ 'cli/atom.sh' | sed '/^$/d' | tail -n 1


下面的sed命令将删除所有空行以及只有空格的行

sed '/^$/d' file
添加
-i
参数以进行就地编辑

sed '/^[[:blank:]]*$/d' file

并非所有的
sed
都支持任何空白字符的标记
\s

您可以使用字符类
[[:blank:]
(用于空格或制表符),或
[:space:]
(用于任何空格):


并非所有的
sed
都支持任何空白字符的标记
\s

您可以使用字符类
[[:blank:]
(用于空格或制表符),或
[:space:]
(用于任何空格):


问题在于
grep
-Z
标志。它导致
grep
以空字符而不是换行符终止匹配行。这对
sed
不起作用,因为
sed
逐行处理输入,并且希望每一行都以换行符终止。在您的示例中,
grep
不发出任何换行符,因此就
sed
而言,它接收文本块时没有终止换行符,因此它将其作为单行处理,因此模式
/^\s*$/
与任何内容都不匹配

此外,
-z
标志只有在
find
输出中的文件名以空字符结尾时才有意义,即使用
-print0
标志。但是您没有使用它,因此
grep
中的
-z
标志是没有意义的。而且
-Z
标志也毫无意义,因为当管道中的下一个命令需要以null结尾的记录时,应该使用该标志,而这不是您的情况

这样做:

sed '/^[[:blank:]]*$/d'
sed '/^[[:space:]]*$/d'

问题在于
grep
-Z
标志。它导致
grep
以空字符而不是换行符终止匹配行。这对
sed
不起作用,因为
sed
逐行处理输入,并且希望每一行都以换行符终止。在您的示例中,
grep
不发出任何换行符,因此就
sed
而言,它接收文本块时没有终止换行符,因此它将其作为单行处理,因此模式
/^\s*$/
与任何内容都不匹配

此外,
-z
标志只有在
find
输出中的文件名以空字符结尾时才有意义,即使用
-print0
标志。但是您没有使用它,因此
grep
中的
-z
标志是没有意义的。而且
-Z
标志也毫无意义,因为当管道中的下一个命令需要以null结尾的记录时,应该使用该标志,而这不是您的情况

这样做:

sed '/^[[:blank:]]*$/d'
sed '/^[[:space:]]*$/d'

好的,这是一种肮脏的方式,但是反向排序和
head-n1
的组合暂时解决了问题…好的,这是一种肮脏的方式,但是反向排序和
head-n1
的组合暂时解决了问题…
[[:blank:]
用于空格和制表符,所以我认为您不需要第二个sed命令。@Kenavoz是的,这只是为了完整性(以及与
\s
的一致性)。
[:blank:]
用于空格和制表符,所以我认为您不需要第二个sed命令。@Kenavoz是的,这只是为了完整性(以及与
\s
的一致性)。