假设我有一个输出一堆字符串的命令。此命令的输出可能类似于:
...
foo
bar
blargh
...
假设我有一些设置字符串
myString$Blah
我想要将每个字符串插入到命令输出中的 $ 处,以便最终得到如下所示的文件:
...
myStringfooBlah
myStringbarBlah
myStringblarghBlah
...
实现这一目标最简单的方法是什么?(最好使用 Awk 和 sed)
答案1
您甚至不需要sed
或awk
。
xargs
可以这样做:-L1 -I '$' echo 'myString$Blah'
$ cat x.list
foo
bar
blargh
$ cat x.list | tr '\n' '\0' | xargs -0 -L1 -I '$' echo 'myString$Blah'
myStringfooBlah
myStringbarBlah
myStringblarghBlah
答案2
您可以在 shell 中完全完成此操作(bash
至少),不会有太多麻烦。以下是执行此操作的脚本:
#!/bin/bash
pattern="$1"
input_file="$2"
output_file="$3"
saved_IFS="$IFS"
IFS=$'\n'
# Store each line of the input file into an array named 'lines'.
lines=($(< $input_file))
IFS="$saved_IFS"
# Truncate output file, if any.
cat /dev/null > $output_file
# Substitute each line into the pattern, and write to output file.
for ln in "${lines[@]}"
do
echo ${pattern/$/$ln} >> $output_file
done
假设这个脚本名为script
,并且您有一个名为的文件,in.txt
其中每行一个字符串,那么运行script in.txt out.txt
就会为您提供所需的输出out.txt
。
答案3
假设您可以使用格式字符串myString&Blah
,用 & 符号代替美元符号,将输出传输到此处:
sed "s/.*/$format/"
这是因为&
在替换字符串中, 被用作“在此处插入匹配”运算符。正则表达式匹配整行,因此它会在 处插入整行&
。
使用双引号来允许扩展格式字符串非常重要。
如果您确实需要使用 & 符号,请使用以下命令:
sed "s/.*/$(echo "$format" | tr '$' '&')/"
如果字符串中有空格,则 $format 周围的引号很重要。