我一直在尝试编写bash代码(实验),其中bash会询问(输入文本),而用户会输入特定的文本,例如(我是新用户),文本(我是新用户)将被移动到名为User = I new的行。
因此,这是一个名为 xyz.cfg
的cfg文件User
Name
Address
Country
这是名为 test 的bash脚本,仅使用 echo $ Input> $ file ,bash会用输入的文本替换整个文件>,但我想保持配置不变,并在 User 行中添加 Enter Text:值,但这对下面的代码没有帮助
#! /bin/sh
file=/root/xyz.cfg
echo "Enter text:"
read Input
echo $Input > $file **(confused here)** **(it replaces the whole cfg)**
我想到的另一行在这里,但是它不起作用。我对这些不好,所以我希望解决。我试图以零运气搜索网络。
(无效)
#! /bin/sh
file=/root/xyz.cfg
echo "Enter text:"
read Input
echo $Input > sed '/User/a' xyz.cfg
(无效)
#! /bin/sh
file=/root/xyz.cfg
echo "Enter text:"
read Input
echo $Input > sed '/User/a' $file
编辑:
在运行bash脚本 ./ test 时要求某人输入文本时,某人键入了从bash促销中输入文本输入的$ Input(
最后, xyz.cfg 应该看起来像
User: Entered Text from bash prompt
Name
Address
Country
在看起来像这样之前,
User:
Name
Address
Country
Edit2:This GIF可能会解释我的需求。
答案 0 :(得分:0)
这应该可以解决问题:
#!/bin/bash
FILE=/tmp/test.cfg
echo -n "Enter text: "
read INPUT
sed -i "s/User:/& $INPUT/" "$FILE"
此方法使用sed进行就地搜索/替换(-i
),该操作将在User:
内的每一行上首次出现$FILE
之后追加输入的文本。
&
指的是文本的匹配部分-本质上是说“将<thing>
替换为<thing> <entered text>
。”
如果每次遇到匹配的User:
行时都需要提示输入文本,则可以使用以下方法:
#!/bin/bash
FILE=/tmp/test.cfg
ORIGINAL=$(cat "$FILE")
truncate -s 0 "$FILE"
while read LINE; do
if `grep -q 'User:' <<< "$LINE"`; then
echo -n "Enter text: "
read INPUT < /dev/tty
sed "s/User:/& $INPUT/" <<< "$LINE" >> "$FILE"
else
echo "$LINE" >> "$FILE"
fi
done <<< "$ORIGINAL"
第二种方法执行以下操作:
User:
,请提示并附加自定义文本;