Bash环境下如何将ls输出追加到文本文件行尾而非新行
解决办法:将两次ls输出合并为同一行追加到文件
我来帮你搞定这个问题!你现在的两次ls命令会各自输出一行内容到practice.txt里,想要把它们的结果合并成同一行、用空格分隔,对吧?之前试的ls -n没用是因为这个参数根本不是用来控制换行的——它的作用是显示数字形式的用户ID和组ID,和输出格式没关系哦~
下面给你几种可行的方法:
方法1:用命令替换直接拼接(最简单)
通过$(command)的形式执行两次ls,shell会自动把命令输出里的换行替换成空格,再用echo把两部分拼起来输出成一行:
echo $(ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz) $(ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz) >> practice.txt
如果你的文件名里没有空格或特殊字符,这个方法完全够用。
方法2:用printf更安全(适合有特殊字符的场景)
如果担心文件名里包含空格(虽然你的场景看起来不会),可以用printf来逐个输出文件名并添加空格,最后再去掉末尾多余的空格:
# 先输出所有文件名加空格,再用sed去掉最后一个空格 printf "%s " $(ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz) $(ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz) | sed 's/ $//' >> practice.txt
方法3:用tr转换换行符
把两次ls的输出放到一个子shell里,然后用tr把所有换行符换成空格,同样可以处理成一行:
# 合并两次ls的输出,将换行转成空格 { ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz; ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz; } | tr '\n' ' ' >> practice.txt # 要是不想末尾留空格,就再加一步sed处理 { ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz; ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz; } | tr '\n' ' ' | sed 's/ $//' >> practice.txt
内容的提问来源于stack exchange,提问作者Summer Frandsen
相关产品推荐
相关产品推荐

