我有一个文本文件(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),并打印由我们读取的内容组成的新字符串。