加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 使用sed反转输入顺序

发布时间:2020-12-15 22:50:31 所属栏目:安全 来源:网络整理
导读:我有一个文件,我们称之为’a.txt’,这个文件包含以下文本行 do to what 我想知道SED命令是什么来反转这个文本的顺序使它看起来像 what to do 我必须做某种追加吗?就像将’do’追加到’to’所以它看起来像 要做(只是为了说清楚) 解决方法 sed回答 由于这个问
我有一个文件,我们称之为’a.txt’,这个文件包含以下文本行

do to what

我想知道SED命令是什么来反转这个文本的顺序使它看起来像

what to do

我必须做某种追加吗?就像将’do’追加到’to’所以它看起来像

要做(只是为了说清楚)

解决方法

sed回答

由于这个问题被标记为sed,我的第一个答案是:

首先(使用arbitraty _标记已查看的空格,当a.txt包含对以下内容执行的操作时:

sed -e '
    :a;
    s/([^_]*) ([^ ]*)/2_1/;
    ta;
    y/_/ /;
   ' a.txt
what to do

比,当a.txt包含做什么:

sed -e '
    :a;
    s/^(|.* )([^+ ]+) 2([+]*)(| .*)$/123+4/g;
    ta;
    :b;
    s/([^_]*) ([^ ]*)/2_1/;
    tb;
    y/_/ /;
   ' <<<'do to to to what'
what to++ do

每个被压缩的重复单词都有一个:

sed -e ':a;s/^(|.* )([^+ ]+) 2([+]*)(| .*)$/123+4/g;ta;
        :b;s/([^_]*) ([^ ]*)/2_1/;tb;
        y/_/ /;' <<<'do do to what what what what'
what+++ to do+

bash回答

但是,由于有很多人在寻找简单的bash解决方案,因此有一种简单的方法:

xargs < <(uniq <(tac <(tr   n <<<'do do to what what what what')))
what to do

这可以写成:

tr   n <<<'do do to what what what what' | tac | uniq | xargs 
what to do

甚至还有一些bash脚本:

revcnt () { 
    local wrd cnt plut out="";
    while read cnt wrd; do
        printf -v plus %$((cnt-1))s;
        out+=$wrd${plus// /+} ;
    done < <(uniq -c <(tac <(tr   n )));
    echo $out
}

会做:

revcnt <<<'do do to what what what what' 
what+++ to do+

或者作为纯粹的bash

revcnt() { 
    local out i;
    for ((i=$#; i>0; i--))
    do
        [[ $out =~ ${!i}[+]*$]] && out+=+ || out+= ${!i};
    done;
    echo $out
}

其中提交字符串必须作为参数提交:

revcnt do do to what what what what
what+++ to do+

或者,如果需要使用标准输入(或来自文件):

revcnt() { 
    local out i arr;
    while read -a arr; do
        out=""
        for ((i=${#arr[@]}; i--; 1))
        do
            [[ $out =~ ${arr[i]}[+]*$]] && out+=+ || out+= ${arr[i]};
        done;
        echo $out;
    done
}

所以你可以处理多行:

revcnt <<eof
do to what
do to to to what
do do to what what what what
eof
what to do
what to++ do
what+++ to do+

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读