![](/img/trans.png)
[英]how to insert newline in a already existing BASH string on the command line
[英](BASH)How to remove default 'newline' operator in command
我有一个命令:
find /etc -type f \( ! -perm /o=w \) -exec /usr/bin/ls -hastl '{}' \; -exec /usr/bin/md5sum '{}' \; > somefile.log
这个命令创建了这样的打印输出(我不需要断行):
...
4.0K -rw-r--r--. 1 root root 332 Oct 23 2012 /etc/xinetd.d/rsync
fd32314f3157aaf15712e6da7758060d /etc/xinetd.d/rsync
....
问题:我必须在此命令中添加什么才能删除新行操作才能得到这样的结果:
(...) 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 '{}')"
每对相邻的行都有两个连接,只需将输出输出到awk 'NR%2{line=$0;next}{print line sep $0}' sep=" >> "
即可根据需要调整sep
。
附录:
为了回应原始作者的评论,我将解释此解决方案的一些细节:
awk
记录处理输入,而没有逐行的其他选项。 (内部)变量NR
存储当前记录的编号。 %
是模数运算符,因此NR%2
对于奇数行号求值为1
对于偶数行数求值为0
。 {...}
将要执行的命令(所谓的“动作”)分组。 由于1
被认为是“ true”而0
被认为是“ false”,因此仅对奇数行号执行第一个操作。 该动作由两个命令组成:首先,将整行( $0
)存储在变量line
,然后处理next
line
记录(不考虑任何其他动作)。 对于偶数行,不执行此操作,因此考虑第二个操作。 由于在执行{
之前没有表达式,所以操作:存储的(即前一个) line
与名为sep
的变量和当前行( $0
)串联。 结果字符串将被打印(并在末尾自动添加一个新行)。 sep
的值作为参数传递给awk
,以使其易于调整而不会弄乱脚本。 由于awk
无需进一步的参数即可读取标准输入和输出,因此您可以将发现的输出通过管道( |
)传递给awk
( find ... -exec ... -exec ... | awk ... > ...
)
恕我直言,您只能使用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' " \;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.