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
的一致性)。