如何将字符串从行中间(字符串之间)复制到行尾

如何将字符串从行中间(字符串之间)复制到行尾

我有一个文本文件(1.txt)如下:

word1
word2
word3

我使用 sed 将字符串添加到每行的开头和结尾,如下所示:

sed 's/^/blahblah1  /g' 1.txt > 2.txt
sed 's/$/  blahblah2/g' 2.txt > 3.txt

导致:

blahblah1  word1  blahblah2
blahblah1  word2  blahblah2
blahblah1  word3  blahblah2

这很好用,但我想做进一步的事情。

我想将每行中间的字符串(word1、word2等)复制到每行的末尾,如下所示:

blahblah1  word1  blahblah2 word1
blahblah1  word2  blahblah2 word2
blahblah1  word3  blahblah2 word3

请注意,blahblah1 和 blahblah2 仅表示 bash 命令和其他字符串文本,并且每行的开头和结尾都相同,如 sed 命令所示 - 它们之间的字符串不同 - 并且这些字符串实际上并不是“blahblah1”并且“巴拉巴拉2”。

有什么建议么?

基本上,我正在获取一个包含字符串列表的文本文件,并希望创建一个包含命令列表的 bash 脚本,以抓取包含字符串的代码行并将它们转储到文件名包含该字符串的文件中 - 因此结构每行的。

答案1

编辑:刚刚意识到这可能无法解决您的问题,因为以下假设“中间词”是第二个词。

试试这个脚本。输入是从文件中读取的input.txt

while read ln; do
    middle_word=`awk '{print $2}' <<< "$ln"`
    new="$ln $middle_word"
    echo "$new"
done < input.txt

根据您提供的输入,这给出了以下输出:

blahblah1  word1  blahblah2 word1
blahblah1  word2  blahblah2 word2
blahblah1  word3  blahblah2 word3

警告:由于某种原因,每行的前导空格都会丢失。

答案2

使用 AWK 实现非常简单:

$ awk '{print "blah1",$0,"blah2",$0}'    1.txt                                                                           
blah1     word1 blah2     word1
blah1     word2 blah2     word2
blah1     word3 blah2     word3

或者使用Python:

$ python -c "import sys; print '\n'.join([ ' blah1 ' + l.strip() + ' blah2 ' + l.strip() for l in sys.stdin])" <  1.txt  
 blah1 word1 blah2 word1
 blah1 word2 blah2 word2
 blah1 word3 blah2 word3

在这两种情况下,想法是相同的——我们逐行读取文件(或者在Python的情况下,stdin),并打印由我们读取的内容组成的新字符串。

相关内容