【问题标题】:(BASH)How to remove default 'newline' operator in command(BASH)如何在命令中删除默认的“换行符”运算符
【发布时间】:2013-07-29 13:17:38
【问题描述】:

我有一个命令:

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
...

【问题讨论】:

  • 问题不清楚

标签: linux shell terminal newline output


【解决方案1】:

这样的命令怎么样

echo "$(ls -hastl '{}') >> $(md5sum '{}')"

【讨论】:

    【解决方案2】:

    将每对相邻的行连接起来,只需将您的输出通过管道传输到awk 'NR%2{line=$0;next}{print line sep $0}' sep=" >> ",根据您的需要调整sep

    附录:

    针对原作者的评论,我将解释一下这个解决方案的一些细节:

    awk 逐行处理输入,没有进一步的选项。 (内部)变量NR 存储当前记录的编号。 % 是模运算符,所以 NR%2 计算为 1 用于奇数行号和 0 用于偶数行号。 {...} 将要执行的命令(所谓的“动作”)分组。由于1 被认为是“真”而0 被认为是“假”,所以第一个动作只对奇数行号执行。该动作由两个命令组成:首先,整行($0)存储在变量line 中,然后处理next 记录(不考虑任何其他动作)。对于偶数行,不执行此操作,因此考虑第二个操作。由于在{ 之前没有表达式,因此执行操作:存储的(即先前的)line 与名为sep 的变量和当前行($0)连接。结果字符串被打印出来(并在末尾自动附加 one 换行符)。 sep 的值作为参数传递给awk,以便在不弄乱脚本的情况下轻松调整它。由于awk 无需其他参数即可读取标准输入和输出,因此您可以通过管道 (|) 将 find 的输出发送到 awk (find ... -exec ... -exec ... | awk ... > ...)

    【讨论】:

    • 外观不错,但我不知道如何使用 awk ,但我会努力学习
    • @user2424174 我添加了一些解释以帮助您理解我的答案并鼓励您学习awk。 ;-)
    【解决方案3】:

    恕我直言,您只能使用 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' " \;
    

    【讨论】:

    • 但我得到了线路:4.0K -rw-r--r--。 1 root root 451 May 17 15:17 /etc/httpd/conf.modules.d/01-cgi.conf 36e54d4b2bd190f5cbad876bfbeda461 /etc/httpd/conf.modules.d/01-cgi.conf - 如何删除文件路径的重复?
    • find /etc -type f -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec sh -c "/usr/bin/md5sum '{}' | cut -d ' ' -f 1 " \;
    猜你喜欢
    • 2013-02-17
    • 1970-01-01
    • 2011-06-10
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多