Linux.如何剪线

  • 本文关键字:何剪线 Linux bash
  • 更新时间 :
  • 英文 :


我在分割线条时遇到问题。我有意见。

echo dat1 dat2 dat3 | tr " " "n" | xargs -I {} -p ln -s {}

我需要从行中获取命令。输出必须为:

echo    
tr     
xargs

我不能使用命令 awk。

$ echo 'echo dat1 dat2 dat3 | tr " " "n" | xargs -I {} -p ln -s {}'
echo dat1 dat2 dat3 | tr " " "n" | xargs -I {} -p ln -s {}
$ echo 'echo dat1 dat2 dat3 | tr " " "n" | xargs -I {} -p ln -s {}'  | awk '{print $1}' RS='|'
echo
tr
xargs

说明:awk,记录分隔符= |,打印每条记录中的第一个字段($1)。

基于格雷普的答案:

$ echo 'echo dat1 dat2 dat3 | tr " " "n" | xargs -I {} -p ln -s {}' | grep -oP '(^|| *)K[^ ]*'
echo
tr
xargs

请注意,echo ... | command最好写成command <<< ...。有关更多详细信息,请参阅 JID 的评论。

免责声明:最好的选择是使用 awk ,但既然你说你不能这样做,这里有另外两个解决方案:

选项 1:用于循环和cut

#!/usr/bin/env bash
data='echo dat1 dat2 dat3 | tr " " "n" | xargs -I {} -p ln -s {}'
IFS="|"
for l in ${data}; do
    echo $l | xargs | cut -d ' ' -f 1
done

解释

将内部字段分隔符设置为|字符,以便for l in沿这些行分隔。

然后,每行都通过xargs,只是为了删除前导空格,最后放入cut中,沿着空格切割并返回它看到的第一个项目。

选项 2:sed

首先将|加上它们后面找到的尽可能多的空格转换为换行符,然后删除每个(新)行中第一个空格的所有内容:

echo ${data} | sed -e 's/|[[:space:]]*/n/g' | sed -e 's/[[:space:]].*$//'

相关内容

  • 没有找到相关文章

最新更新