linux - 通过shell脚本更改文本文件中的路径地址

标签 linux bash shell sed

<分区>

在我的 Bash 脚本中,我必须将名称更改为文本文件中的路径地址(新地址): (MYADDREES) 更改为 ( /home/run1/c1 ) 并将其另存为新文件。

我是这样做的:定义了一个新变量 = 新地址,并尝试用文本文件中的先前地址替换它。

我使用 sed 但它有问题。

我的脚本是:

#!/bin/bash
# To debug
set -x
x=`pwd`
echo $x
sed "s/MYADDRESS/$x/g" < sample1.txt > new.txt
exit

最佳答案

pwd 的输出可能包含 / 字符,使您的 sed 表达式看起来像 s/MYADDRESS//home/user/somewhere/。这使得 sed 无法整理出应该用什么替换什么。有两种解决方案:

为 sed 使用不同的分隔符:

sed "s,MYADDRESS,$x,g" < sample1.txt > new.txt

...尽管如果当前路径包含逗号字符或其他对 sed 来说是特殊字符的字符,也会出现同样的问题,因此更健壮方法是使用 awk 代替:

awk -v curdir="$(pwd)" '{ gsub("MYADDRESS", curdir); print }' < sample1.txt > new.txt

关于linux - 通过shell脚本更改文本文件中的路径地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585132/

相关文章:

linux - Bash 混合 for 循环和 if then 表达式给出不好的结果

git - 是否有可能 'colorize' git 日志消息?

linux - 如何从 Linux 上的文件中获取必填字段?

bash - 在 shell 脚本中如何验证给定主机名是否属于 localhostname 系列

linux - 如何在shell脚本中更改日期格式

linux - 将 stdout 和 stderr 重定向到文件以及 Linux 中的控制台

c++ - 尽管链接了库文件夹中的 .so 文件,但缺少 .h 文件

bash - 在 bashrc 中为 GREP_OPTIONS 匹配文件类型 --exclude

linux - 运行时Monogame "Could not find font file"

xml - 从简单的 XML 文件中提取数据