Linux (BASH)如何删除默认值';新线';接线员
我有一个命令:Linux (BASH)如何删除默认值';新线';接线员,linux,shell,terminal,newline,output,Linux,Shell,Terminal,Newline,Output,我有一个命令: find /etc -type f \( ! -perm /o=w \) -exec /usr/bin/ls -hastl '{}' \; -exec /usr/bin/md5sum '{}' \; > somefile.log 这个命令创建这样的打印输出(我需要没有断线): 问题:要删除新行操作以获得这样的结果,我必须在此命令中添加什么内容: (...) is '-rw-r--r--. 1 root root 332 Oct 23 2012' ... 4.0K (.
find /etc -type f \( ! -perm /o=w \) -exec /usr/bin/ls -hastl '{}' \; -exec /usr/bin/md5sum '{}' \; > somefile.log
这个命令创建这样的打印输出(我需要没有断线):
问题:要删除新行操作以获得这样的结果,我必须在此命令中添加什么内容:
(...) is '-rw-r--r--. 1 root root 332 Oct 23 2012'
...
4.0K (...) /etc/xinetd.d/rsync >> fd32314f3157aaf15712e6da7758060d /etc/xinetd.d/rsync
...
像这样的命令怎么样
echo "$(ls -hastl '{}') >> $(md5sum '{}')"
IMHO您只能使用exec执行一个命令。一个可能的解决方案可能是执行“sh-c”,这样就可以使用管道和类似工具: 末尾有一个换行符:
find /etc -type f -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec /usr/bin/md5sum '{}' \;
没有任何换行:
find /etc -type f -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec sh -c "/usr/bin/md5sum '{}'| tr -d '\n' " \;
两个连接每一对相邻的行只需将您的输出通过管道传输到
awk'NR%2{line=$0;next}{print line sep$0}'sep=“>>”
根据您的需要调整sep
附录:
针对原作者的评论,我将解释此解决方案的一些细节:
awk
按记录方式处理输入,无需逐行执行更多选项。
(内部)变量
NR
存储当前记录的编号%
是模运算符,因此对于奇数行号,NR%2
的计算结果为1
,对于偶数行号,0
<代码>{…}将要执行的命令(所谓的“操作”)分组。由于1
被视为“真”,而0
被视为“假”,因此第一个操作仅对奇数行号执行。此操作由两个命令组成:首先,整行($0
)存储在变量行
中,然后处理下一个
记录(不考虑任何其他操作)。对于偶数行,不执行此操作,因此考虑第二个操作。由于在{
之前没有表达式,因此执行操作:存储的(即上一个)行
与名为sep
的变量和当前行($0
)连接在一起。打印生成的字符串(并在最后自动追加一行新行)。将sep
的值作为参数传递给awk
,以便在不影响脚本的情况下轻松进行调整。由于awk
读取标准输入和输出而无需进一步参数,因此您可以将查找的输出通过管道(|
)传递到awk
(find…-exec…-exec…| awk…>)问题不清楚,但我得到了答案:4.0K-rw-r--r--.1根根目录451 May 17 15:17/etc/httpd/conf.modules.d/01-cgi.conf 36e5444b2bd190f5cbad876bbeda461/etc/httpd/conf.modules.d/01-cgi.conf-如何删除文件路径的重复?find/etc-etc-type f-exec sh-c“/bin/ls-hastl'{}'tr'\n''”\;-exec sh-c“/usr/bin/md5sum'{}'cut-d'-f1”\
外观不错,但我不知道如何使用awk,但我会尝试使用learn@user2424174我添加了一些解释,以帮助您理解我的答案,并鼓励您学习awk
find /etc -type f -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec sh -c "/usr/bin/md5sum '{}'| tr -d '\n' " \;