将 xargs 中的字符串插入另一个字符串

将 xargs 中的字符串插入另一个字符串

假设我有一个输出一堆字符串的命令。此命令的输出可能类似于:

...
foo
bar
blargh
...

假设我有一些设置字符串

myString$Blah

我想要将每个字符串插入到命令输出中的 $ 处,以便最终得到如下所示的文件:

...
myStringfooBlah
myStringbarBlah
myStringblarghBlah
...

实现这一目标最简单的方法是什么?(最好使用 Awk 和 sed)

答案1

您甚至不需要sedawk

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 周围的引号很重要。

相关内容