如何从用户那里获取 inout 并使用 echo 或 sed 修改文件

用户8863627

我正在使用以下代码从用户获取输入并修改我的 backup.php 文件:

#!/bin/bash
read -p "Enter hostname: " hostname
read -p "Enter cPanel username: " user
read -p "Enter password: " pass

echo "\$source_server_ip = \"$hostname\";" >> "backup.php"
echo "\$cpanel_account = \"$user\"; "      >> "backup.php"
echo "\$cpanel_password = \"$pass\"; "     >> "backup.php"

这完美地工作;但是,我想分别在 backup.php 的第 4、5 和 6 行插入用户提供的详细信息。

备份.php内容:

Line no. 1: php
Line no. 2: include xmlapi.php
Line no. 3: (blank)
Line no. 4: $source_server_ip = "   "; 
Line no. 5: $cpanel_account = "   ";
Line no. 6: $cpanel_password = "   "; 
Line no 7 L code continue..

我想按原样重置代码,并希望在线更改第 4,5.6 行。

我怎样才能做到这一点?我需要使用 sed 吗?

比萨

如果我理解正确,您需要用一些新行替换/更新第 4、5 和 6 行。您可以为此使用sed'ss替换命令:

host_line="\$source_server_ip = \"$hostname\""
user_line="\$cpanel_account = \"$user\""
pass_line="\$cpanel_password = \"$pass\""

sed -i "4s/.*/$host_line/; 5s/.*/$user_line/; 6s/.*/$pass_line/" backup.php

#different notation:
sed -i -e "4s/.*/$host_line/" -e "5s/.*/$user_line/" -e "6s/.*/$pass_line/" backup.php
  • 4s 确定替换命令应该发生在哪一行(在这种情况下是第 4 行)

  • .* 匹配整行并将其替换为您的用户输入

  • -i是就地编辑。它将编辑您的文件而不是将结果发送到标准输入

警告: usingseds命令非常简单,但如果您的变量包含未转义的特殊字符 to sed它可能会产生一些令人惊讶和危险的结果,例如:&, /, newline, ...


或者使用sed'sc命令:

sed -i "4c \
$host_line
5c \
$user_line
6c \
$pass_line
" backup.php

#different notatiton:
sed -i -e "4c $host_line" -e "5c $user_line" -e "6c $pass_line" backup.php

警告:您也可以设法打破这一点,newline例如未转义

pass='mypass
2c oops'

您要么必须转义这些特殊字符,sed要么使用我认为最安全的解决方案awk

awk -i inplace -v hl="$host_line" -v ul="$user_line" -v pl="$pass_line" '
   NR==4 { $0=hl } 
   NR==5 { $0=ul }
   NR==6 { $0=pl }
   { print }'  backup.php

不要忘记使用-r选项 withread否则它会特别对待反斜杠。

另外,请注意,即使变量中的反斜杠稍后也会被解释!如果要防止出现这种情况,可以使用参数扩展添加额外的反斜杠:

host_line="\$source_server_ip = \"${hostname//\\/\\\\}\""
user_line="\$cpanel_account = \"${user//\\/\\\\}\""
pass_line="\$cpanel_password = \"${pass//\\/\\\\}\"" 

编辑:如果您只想在第 3 行之后插入3 行,请使用这个简单的sed

sed -i "4i $host_line\n$user_line\n$pass_line" backup.php

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用sed检索和修改文件中的一行

来自分类Dev

使用sed获取列并对其进行修改

来自分类Dev

如何使用sed修改带有管道分隔值的文件中特定列中的值

来自分类Dev

如何使用sed解析和修改查找结果?

来自分类Dev

使用sed进行配置修改

来自分类Dev

如何使用Python从用户那里获取确切数量的输入?

来自分类Dev

使用sed修改xml文件

来自分类Dev

如何使用sed仅获取文件名

来自分类Dev

如何使用sed替换xml文件行

来自分类Dev

使用sed或类似方法修改文件中的行

来自分类Dev

如何使用sed修改特定列

来自分类Dev

如何使用Shell修改文件?

来自分类Dev

使用sed修改标题

来自分类Dev

使用sed检索和修改文件中的单行

来自分类Dev

无论如何,是否有将大写转换为小写以及使用SED修改文件中文本的空间的方法

来自分类Dev

如何使用sed编辑配置文件

来自分类Dev

使用awk或sed修改文件

来自分类Dev

如何使用sed或awk操作CSV文件?

来自分类Dev

如何执行使用echo和sed生成的shell命令?

来自分类Dev

如何使用echo覆盖文件?

来自分类Dev

为什么echo> file比echo使用更多实时时间| sed>文件?

来自分类Dev

如何使用Bash sed修改整数

来自分类Dev

如何根据特定模式使用sed或awk修改特定列

来自分类Dev

使用sed从XML文件获取特定文本

来自分类Dev

如何使用sed解析和修改查找结果?

来自分类Dev

使用SED修改模式

来自分类Dev

在 bash 中使用 sed 修改配置文件

来自分类Dev

将 sed 与 echo 一起使用并从文件中读取

来自分类Dev

当文件中的字符串匹配时,如何使用 sed 修改行的最后 2 位数字