标签: replace

如何替换文本文件中的占位符列表?

我有一个文本(配置)文件,但不幸的是,读取该文件的程序不允许使用任何类型的变量。所以我想使用一个预处理器,在将配置文件传递给程序之前替换配置文件中的一组占位符。

我可以以任何我想要的方式定义变量的格式(例如§SOME_DIR)。如果我只有几个变量,我可能会使用sed

sed  -e "s*§SOME_DIR*$SOME_DIR*g"  my.conf | target_prog
Run Code Online (Sandbox Code Playgroud)

但是变量列表很长,而且应该很容易配置 - 所以我更愿意把变量放在一个属性文件中,比如

SOME_DIR=...
OTHER_DIR=...
...
Run Code Online (Sandbox Code Playgroud)

然后打电话

some_replace_tool  my.properties  my.conf  | target_prog
Run Code Online (Sandbox Code Playgroud)

我正在寻找“some_replace_tool”。有任何想法吗?

search text-processing replace

6
推荐指数
1
解决办法
4670
查看次数

使用 sed 查找整个单词并替换

我在文件中有以下文本块:

test3.legacy test4.legacy test3 test3.kami
Run Code Online (Sandbox Code Playgroud)

我只想test3作为一个整体搜索并用空替换它。不幸的是,我所有的尝试都从和 中删除了test3。我试过了:test3.legacytest3.kami

sed 's/^test3://g' myfile.txt
sed 's/\btest3\b//g' myfile.txt
sed 's/\<test3\>//g' myfile.txt
Run Code Online (Sandbox Code Playgroud)

没有任何运气。有什么想法可以解决这个问题吗?

编辑:大多数尝试导致以下结果:.legacy test4.legacy .kami

command-line sed replace

6
推荐指数
1
解决办法
2万
查看次数

一个符合 posix 的函数,用于用参数和正则表达式替换文本

我正在创建一个函数,以安全的方式使用正则表达式替换字符串,不可能注入字符,也不会放弃使用正则表达式:

#! /bin/sh

stringer()
{
    pattern="${1}"
    replace="${2}"

    printf '%s\n' "examp/e w\\th sed: " | sed "s/${pattern}/${replace}/g"
}

stringer "\\/" "l"
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但如果我使用:

stringer "/" "l"
Run Code Online (Sandbox Code Playgroud)

它会导致一个 sed 错误,关于这个我知道输入参数可以被转义,但是它不能与正则表达式一起使用,我希望能够将它与正则表达式一起使用,有或没有任何建议sed 但没有符合 posix 方式的扩展?

shell-script posix regular-expression replace

6
推荐指数
1
解决办法
1664
查看次数

使用 awk 替换括号?

在这两种情况下,如何使用 awk 替换括号?

  1. 将空括号更改为“无”

    192.168.0.24,向上,()

  2. 删除括号,只剩下 host.domain.com

    192.168.0.25,Up,(host.domain.com)

awk text-processing replace

5
推荐指数
1
解决办法
1万
查看次数

替换模板中的占位符

假设我有一个这样的 shell 配置文件config

HOST=localhost
PORT=8080
Run Code Online (Sandbox Code Playgroud)

现在我有一个template这样的模板:

The host is <%= @HOST %>
The port is <%= @PORT %>
Run Code Online (Sandbox Code Playgroud)

如何templateconfig文件中的值替换占位符?

我当然可以这样做:

$ . config
$ sed -e "s/<%= @HOST %>/$HOST/" \
> -e "s/<%= @PORT %>/$PORT/" < template
The host is localhost
The port is 8080
Run Code Online (Sandbox Code Playgroud)

但是如果有很多配置值,这就变得太麻烦了。我将如何以更通用的方式做到这一点?我想遍历每个占位符并用实际值替换它。

bash configuration text-processing replace variable-substitution

5
推荐指数
1
解决办法
7243
查看次数

如何在 bash 中一次替换多个子字符串?

我有一个目录包含要在 bash 中回显的图像文件。在回显时,我想在单行命令中替换文件名和扩展名。

示例文件:

images/file_name_1.jpg
images/file_name_2.jpg
Run Code Online (Sandbox Code Playgroud)

通常,我可以像这样进行单一替换:

images/file_name_1.jpg
images/file_name_2.jpg
Run Code Online (Sandbox Code Playgroud)

输出变成这样:

for i in images/*; do echo ${i/file/image}; done
Run Code Online (Sandbox Code Playgroud)

如何将其保留在 for 循环中并将“jpg”字符串也替换为“png”?这只是一个例子,我可以将点替换为逗号等。

当我尝试这个时:

images/image_name_1.jpg
images/image_name_2.jpg
Run Code Online (Sandbox Code Playgroud)

这不起作用。我找不到任何其他解决方案或想法。这可能吗?如果可以,怎么做?

bash shell-script replace

5
推荐指数
1
解决办法
6858
查看次数

搜索和替换不是其他字符串的子字符串的字符串

我有一个像这样的替换列表:

search_and -> replace
big_boy -> bb
little_boy -> lb
good_dog -> gd
...
Run Code Online (Sandbox Code Playgroud)

我需要替换上述内容,但同时避免匹配像这样更长的字符串:

big_boys
good_little_boy
Run Code Online (Sandbox Code Playgroud)

我试过这个:

sed -i -r "s/$(\W){search}(\W)/$\1{replacement}\2/g"
Run Code Online (Sandbox Code Playgroud)

但是当字符串(在这种情况下为“good_dog”)出现在一行的末尾时,上述内容不起作用,如下所示:

Mary had a 'little_boy', good_little_boy, $big_boy, big_boys and good_dog

Mary had a 'lb', good_little_boy, $bb, big_boys and good_dog
Run Code Online (Sandbox Code Playgroud)

而且我怀疑当字符串也出现在行首时,上述内容是否有效。有没有好办法进行搜索和替换?

sed text-processing regular-expression replace

5
推荐指数
1
解决办法
2875
查看次数

递归替换文件中很长的字符串

我在许多文件中有一个很长很复杂的字符串,我想递归地删除/替换它。该字符串包含许多斜杠、反斜杠和空格以及任何类型的特殊符号。我怎么做?一个简单的 find + sed 组合是行不通的,因为其中包含我几乎无法逃脱的所有特殊符号。

是否可以将搜索字符串写入文件并将其用作搜索和替换命令的输入?

bash string search replace

5
推荐指数
1
解决办法
2078
查看次数

用不同的映射字符串集替换多个字符串

我想用一组不同的预定义字符串替换多个字符串模式。

例如:

输入:

This sentence will be converted to something different. This sentence can contain same words.
Run Code Online (Sandbox Code Playgroud)

输出:

These words need to be replaced with something different. These words can contain same alphabets. 
Run Code Online (Sandbox Code Playgroud)

所以在这里我想转换为以下模式。

  • 这 => 这些
  • 句子 => 词
  • 将 => 需要
  • 转换=>替换
  • 到 => 与
  • 单词 => 字母

让我知道是否可以完成。

sed replace

5
推荐指数
1
解决办法
4812
查看次数

有没有办法使用 shell 变量替换来替换最后一次出现的匹配项?

% x=abracadabra
% echo ${x//a/o}
obrocodobro
Run Code Online (Sandbox Code Playgroud)

哼……

有没有一种方法,以取代过去使用shell substitions模式的出现(督察,没有推出sedawkperl,等)?

scripting bash wildcards replace

5
推荐指数
2
解决办法
3512
查看次数