我在 Unix 框中拥有数百个包含以下内容的文件(file1.txt、file2.txt......filen.txt)。
file1.txt 位置:$test/$type/path1/abc/testtable_123/ 表:$database.testtable_123
file2.txt 位置:$test/$type/path1/abc/testtable_345/ 表:$database.testtable_345
我需要您的帮助,使用 Unix 中的 sed (或 awk ,其他)实用程序将所有文件(file1.txt ... filen.txt)中的上述行替换为下面的内容。
file1.txt 位置:$test/$type/**path2/path3/**abc/testtable_123/ 表:$测试数据库.测试表_123
file2.txt 位置:$test/$type/路径2/路径3/abc/testtable_345/表:$测试数据库.测试表_345
答案1
在运行这些命令之前,您应该备份您的文件,以防我误解或搞砸了什么。
开头的 find 命令搜索与“file*.txt”匹配的文件并将它们输出为一个空分隔列表。xargs -0 解析该空分隔列表并将其提供给 sed。
对于 sed - 我使用 | 作为分隔符而不是更常见的 / 因为 / 是我们尝试替换的字符串的一部分。-i 表示“就地”,因此它会修改文件。
find . -type f -name "file*.txt" -print0 | xargs -0 sed -i 's|path1|path2/path3|g'
接下来将 $database 更改为 $test_database
find . -type f -name "file*.txt" -print0 | xargs -0 sed -i 's|$database|$test_database|g'