繁体   English   中英

用可变字符串替换字符串

[英]substituting a string with a variable string

我有两个目录,S 和 T,每个目录有 150 个文件。 文件名是相同的,例如,如果 S 包含 file1、file2、...、file150,那么 T 也包含 file1、file2、...、file150。 S 中的每个文件都包含以下代码:

<a href="index.php">Home</a>  &rarr; <a href="page1.php">Page 1</a> 
&rarr;  NAME1  <a href="A.php"> &rarr Previous</a> <a href="B.php">Next  &rarr </a>

其中所有 150 个文件中除 NAME1 之外的所有文件都是相同的,即文件 2 为 NAME2,文件 3 为 NAME3 等。

T 中的每个文件都包含以下代码:

<a href="index.php">Home</a>  &rarr; <a href="page1.php">Page 1</a> 
&rarr;  STRING1  <a href="X1.php"> &rarr Previous</a> <a href="Y1.php">Next  &rarr </a>

其中,文件 1 的 STRING1、文件 2 的 STRING2 等是(相当长的)其他代码字符串,每个文件都会发生变化,每个文件的 X1、Y1 也不同,文件 2 的 X2、Y2、文件 3 的 X3、Y3,等等。

我想编写一个 shell 脚本,用 T/file1 中的字符串 X1、Y1 替换 S/file1 中的字符串 A、B,将 T/file2 中的 X2、Y2 替换为 S/file2 中的字符串 A、B,等等。 我正在 Mac 或 Ubuntu 计算机上使用终端。 我已经在网上和这个论坛上进行了搜索,并尝试了 sed 和 awk,但我无法正常工作。 感谢您的任何帮助或建议。

我将举一个只有两个文件而不是 150 个文件的例子。假设我已经准备好了脚本。 在我执行脚本之前,目录 S 有包含内容的文件 file1

N1 A B

和文件 file2 与内容

N2 A B

而目录 T 有包含内容的文件 file1

S1 X1 Y1

和文件 file2 与内容

S2 X2 Y2

执行脚本后,S 有包含内容的文件 file1

N1 X1 Y1

和文件 file2 与内容

N2 X2 Y2

而目录 T 不变。

我希望在运行脚本时对所有 150 个文件都执行此操作。

像这样的事情可能是最简单的:

for path in S/*; do
    file="${path#*/}"
    awk '
        NR==FNR { $1=""; vals[NR]=$0; next }
        { print $1 vals[FNR] }
    ' "T/$file" "S/$file" > tmp &&
    mv tmp "S/$file"
done

对于像您发布的最后一个示例一样琐碎的事情,您不需要像那样使用 awk,但是从您的原始示例中,听起来您有一些更复杂的处理要做,因此我展示了将 awk 脚本放入流程的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM