📌  相关文章
📜  如何在 linux 命令行中替换多个文件中的字符串 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:24:16.576000             🧑  作者: Mango

如何在 Linux 命令行中替换多个文件中的字符串 - Shell-Bash

在 Linux 的命令行环境中,我们可以使用 sedawk 工具来替换一个或多个文件中的字符串。这些工具的使用方法都很简单,只需学习一些基础的命令语法即可。

以下是在 Linux 命令行中替换多个文件中的字符串的一些方法:

使用 sed 工具

sed 工具是在 Linux 命令行中进行文本替换的常用工具之一。要使用 sed 工具替换多个文件中的字符串,可以先将文件路径组成一个列表,然后使用循环遍历每个文件并执行替换操作。

#!/bin/bash

# 定义待替换的字符串,旧字符串和新字符串
old_str="foo"
new_str="bar"

# 定义文件路径列表
file_list=(
  "/path/to/file1.txt"
  "/path/to/file2.txt"
  "/path/to/file3.txt"
)

# 循环遍历文件列表并替换字符串
for file in "${file_list[@]}"
do
  sed -i "s/$old_str/$new_str/g" "$file"
done

上述脚本将 "/path/to/file1.txt", "/path/to/file2.txt", "/path/to/file3.txt" 这三个文件中的字符串 "foo" 替换成了 "bar"。

其中,-i 参数表示直接在文件中操作替换,s 表示进行替换操作,$old_str 表示要替换的旧字符串,$new_str 表示将被替换的新字符串。 /g 表示全局替换。

使用 awk 工具

awk 工具也可以用于在 Linux 命令行中进行字符串替换操作。要使用 awk 工具替换多个文件中的字符串,可以结合使用 find 命令来查找需要替换的文件,然后使用 awk 工具读取每个文件并执行替换操作。

#!/bin/bash

# 定义待替换的字符串,旧字符串和新字符串
old_str="foo"
new_str="bar"

# 查找需要替换的文件,指定后缀名为 .txt
files=$(find /path/to/files -name "*.txt")

# 循环遍历文件列表并替换字符串
for file in $files
do
  awk '{ if ($0 ~ /'$old_str'/) gsub(/'$old_str'/,"'$new_str'"); print $0; }' "$file" > temp_file && mv temp_file "$file"
done

上述脚本将 /path/to/files 目录下所有后缀名为 .txt 的文件中的字符串 "foo" 替换成了 "bar"。

其中,find 命令可以查找指定目录下的所有文件;awk 命令中的 $0 表示读取到的每行文本,gsub 函数表示全局替换。

小结

sedawk 是 Linux 命令行中比较常用的文本操作工具。通过学习它们的使用方法,我们可以在命令行中快速地进行字符串替换操作。