根据作者列表生成 URL 列表的脚本

根据作者列表生成 URL 列表的脚本

我需要获取一个作者姓名列表,其中可能包含 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"

相关内容