【问题标题】:Bash script: how to replace text from user inputBash 脚本:如何替换用户输入的文本
【发布时间】:2013-05-26 21:41:16
【问题描述】:

我需要制作一个交互式 bash 脚本,用户将在其中输入一个单词,例如“xyz”,它将替换文本文件中的一个单词。

例如,我有一个名为 example.sh 的脚本。当我运行它时,它应该问:

What is your name?: 
and the user will input 'xyz'.

脚本应接受该输入并将名为 userlist.txt 的文本文件中的“用户名”替换为“xyz”

为了更清楚,我需要用户输入才能运行

sed -i -e s/username/userinput/g userlist.txt

【问题讨论】:

  • 到目前为止你有没有试过的代码?您可以将其添加到您的帖子中吗?

标签: linux bash


【解决方案1】:

您可以使用read builtin 读取用户输入,然后您可以使用sed(1) 进行文本替换:

if read -p "What is your name? " name; then
  sed -i~ -e "s/username/${name}/g" userlist.txt
else
  # Error
fi

【讨论】:

  • 我无法完成这项工作,在 Arch Linux 上,用户名被 ${name} 替换了
  • 编辑:名称中有“/”。像 /dev/sda。所以我得到错误“'d'的未知选项,'s'的未知选项”
  • @user156238:问题是,您没有像参数一样将$name 传递给sed:您正在使用$name 的值动态构造命令,因此对sed 有特殊意义的变量会被这样对待。您需要预处理 $name 的值,然后再将其与 sed 一起使用以引用此类特殊字符:一项不平凡的任务。
【解决方案2】:
#!/bin/bash
echo "What is your name?"
read name
sed -i -e s/username/"$name"/g userlist.txt

【讨论】:

  • 我无法完成这项工作,在 Arch Linux 上,用户名被替换为“$name”
  • @user156238 很奇怪,在 Linux Slackware 上为我工作。 Adam Rosenfields 的回答也很有效 - 我对它们都进行了测试。
猜你喜欢
  • 2014-02-16
  • 2021-09-29
  • 2023-03-04
  • 2016-11-18
  • 1970-01-01
  • 2017-03-10
  • 2015-11-06
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多