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+ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |