拆分和连接(从输入文件创建命令行参数)

拆分和连接(从输入文件创建命令行参数)

如何从格式的行文件中连接文本:

line1
line2
...

得到像这样的结果

-o line1:1 -o line2:1 ...

我找到了如何与分隔符连接的解决方案,如下所示:

ds=`cat list.txt`
${ds//$'\n'/','}

但我不知道如何为每个条目添加前缀。

答案1

这取决于您想要对创建的字符串执行什么操作。它看起来像一组命令行选项,因此我假设您希望将它与一些名为 的实用程序一起使用util

这是一个解决方案/bin/sh

#!/bin/sh

listfile=$1

set --
while IFS= read -r line; do
    set -- "$@" -o "$line:1"
done <$listfile

util "$@"

这将从脚本命令行上给出的文件中读取,并且对于从该文件中读取的每一行,它设置要包含的位置参数-o以及从文件中读取的行的LINE:1位置。LINE

读取所有行后,它会util使用构建的命令行参数列表进行调用。通过使用"$@"(使用双引号),我们确保构造的参数列表中的每个单独项目都被单独引用。

bash使用数组来bash保存我们创建的命令行参数:

#!/bin/bash

listfile=$1

while IFS= read -r line; do
    args+=( -o "$line:1" )
done <$listfile

util "${args[@]}"

在上面的两个例子中,引用很重要。同样的事实是,我们创建了一个单独项目的数组(每-o一个LINE:1都是列表中的项目)。另一种方法是创建一个单串 -o LINE1:1 -o LINE2:1 etc.,但如果用作 as ,这将被解释为一个参数util "$string",并且如果用作 as ,则会经历分词和文件名通配util $string(如果输入文件中的任何行包含空格、制表符或文件名通配字符,则这将不起作用)。

上面的两个脚本都将用作

$ ./script.sh file

其中script.sh是可执行脚本文件,file是要读取的输入文件名。

有关的:

答案2

使用最近的 shell(例如bash),尝试

mapfile -t TMP <file
TMP=(${TMP[@]/%/:1})
echo ${TMP[@]/#/-o }
-o line1:1 -o line2:1 -o line3:1

答案3

sed 's/\(.*\)/-o \1:1/' file.txt | xargs /path/to/command

替换sed内容如下:将给定行中的文本替换为“-o the_original_text:1”。然后该xargs命令获取这些修改后的文本行并将它们连接起来以适合命令行参数

答案4

输入文件:

line1
line2
line3

命令:

perl -lpe '$\=" ";$_="-o $_:1"' input.txt

替代命令:

awk '{ORS=":1 ";print"-o "$0}' input.txt

输出(两个命令相同):

-o line1:1 -o line2:1 -o line3:1 

相关内容