我需要获取一个作者姓名列表,其中可能包含 1 到 4 个单词,如下所示
Osho
Hartmann Nicolai
Bird Robert Montgomery
Coates Ta-Nehisi
并生成如下 URL
site.com/word1+word+word3+word4
如果我这样做
< list.txt xargs -l | xargs printf '"site.com/%s\n' > url.txt
它将接受一个单词。我的问题是如何添加另外 3 个可选参数,例如%s
?或者也许有其他命令的更简单的方法?
答案1
测试您的命令后,我得到了以下结果:
"site.com/Osho
"site.com/Hartmann
"site.com/Nicolai
"site.com/Bird
"site.com/Robert
"site.com/Montgomery
"site.com/Coates
"site.com/Ta-Nehisi
如我所见,您想用 替换每个空格+
,因此您可以使用sed
如下命令:
< list.txt xargs -l | sed "s/\ /+/g" | xargs printf 'site.com/%s\n' > url.txt
结果如下:
site.com/Osho
site.com/Hartmann+Nicolai
site.com/Bird+Robert+Montgomery
site.com/Coates+Ta-Nehisi
此命令非常有效且动态,您可以拥有一个很长的组合名称(包含 6 个、10 个或更多部分),只有空格会消失,每个-
字符甚至不会被修改
注意:我刚刚删除了命令"
中的字符,printf
因为您的预期输出中不需要它
答案2
我建议使用 awk 执行如下文本处理任务:
$ awk -v site="site.com" -vOFS=+ '{$1=$1; print site "/" $0}' list.txt
site.com/Osho
site.com/Hartmann+Nicolai
site.com/Bird+Robert+Montgomery
site.com/Coates+Ta-Nehisi
答案3
您可以简单地使用sed
, 三次:
- 第一个 sed 删除前导和尾随空格
- 第二个用
+
字符替换剩余的空格 - 第三个在结果前加上前缀
site.com/
因此表达式可以是
cat input.txt | sed -e "s/^[ \t]*//;s/[ \t]*$//" | sed -e "s/\s+/+/g" | sed -e "s/\(.*\)/site.com\\/\1/"
输出为
site.com/Osho
site.com/Hartmann+Nicolai
site.com/Bird+Robert+Montgomery
site.com/Coates+Ta-Nehisi
答案4
尝试这个:
input="/path/to/list.txt"
while IFS= read -r line
do
echo "http://site.com/${$line// /+}" > urls.txt
done < "$input"