$ 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/awk-based options来摆脱空白行。 (输出中为#3
)。但我不能说得对......
我需要将最后一行放入变量......
我正在使用的以下实际命令未能提供输出......
find ~/AppData/Local/atom/ -name atom.sh -type f | grep -FzZ 'cli/atom.sh' | sed '/^$/d' | tail -n 1
答案 0 :(得分:5)
sed命令下面会删除所有空行。
sed '/^$/d' file
或
sed命令下面会删除所有空行以及只有空格的行。
sed '/^[[:blank:]]*$/d' file
添加-i
参数以进行就地编辑。
sed -i '/^[[:blank:]]*$/d' file
答案 1 :(得分:0)
并非所有sed
都支持任何空格字符的令牌\s
。
您可以使用字符类[[:blank:]]
(用于空格或制表符)或[[:space:]]
(用于任何空格):
sed '/^[[:blank:]]*$/d'
sed '/^[[:space:]]*$/d'
答案 2 :(得分:0)
问题是-Z
的{{1}}标志。它会导致grep
以空字符而不是换行符终止匹配的行。这不会与grep
一起使用,因为sed
逐行处理输入,并且它希望每一行都以换行符结束。在您的示例中,sed
不会发出任何换行符,因此就grep
而言,它会收到一个没有终止换行符的文本块,因此会将其作为单行处理,所以模式sed
并不匹配任何东西。
此外,/^\s*$/
标志仅在-z
的输出中的文件名由空字符(即find
标志)终止时才有意义。但是您没有使用它,因此-print0
中的-z
标记毫无意义。并且grep
标志也没有意义,因为当管道中的下一个命令期望以空值终止的记录时应该使用它,这不是你的情况。
这样做:
-Z