【问题标题】:Regexp to add a string after found a regexp in a file正则表达式在文件中找到正则表达式后添加字符串
【发布时间】:2017-11-17 14:54:50
【问题描述】:

一开始我在寻找一个 Emacs 命令,我找到了query-replace-regexp,但我没有找到如何用这个命令解决我的问题。 我正在寻找用文件中的另一个字符串替换一个字符串。

我想替换这个:

容器随机1-字符串{

通过这个:

容器随机1-字符串{

string:string-string 0;

或者这个:

容器 1-string {

通过这个:

容器 1-string {

string:string-string 0;

或者这个:

容器字符串 24 {

通过这个:

容器字符串 24 {

string:string-string 0;

random1-string 是一个随机字符串。 我正在寻找一个递归命令。我必须更改 400 个节点。 我可以使用每一个 linux 命令。

【问题讨论】:

  • 这里没有足够的信息来为您提供答案。例如,string:string-string 0; 来自哪里? Help others reproduce the problemcreate a Minimal, Complete, and Verifiable example.
  • 另外,如果random1-string 是变量,您能否发布更多关于该变量可能是什么样子的示例?有通用格式吗?
  • 您希望匹配的正则表达式是什么?或者你能用英语描述规则吗?是否是 container foo { 行的每个实例,其中 foo 可以是任何符号?如果需要更严格,有什么限制?

标签: regex replace emacs


【解决方案1】:

如果您的随机字符串没有特定模式,则很难使用正则表达式有效地替换它。

你可以做的是列出你想在文件中更改的变量名 (strings_list.in)

random1-string
random2-string
random3-string

然后循环文件并按以下方式更改源文件:

for v in `cat strings_list.in`;
do
    sed -i "s/container\s+$v\{/container $v\{\nstring:string-string 0;/g" file_to_edit;
done;

在任何操作之前备份您的文件。

如果您的随机字符串实际上是一个变量,那么您可以在 sed 命令中使用以下正则表达式来处理该文件,并对其进行反向引用:

sed -i "s/container\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\{/container \1 \{\nstring:string-string 0;/g" file_to_edit;

【讨论】:

  • 我得到一个错误:sed: -e expression #1, character 85: Previous regular expression invalid
  • sed -i "s/container\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\{/container \1 {\nstring:string -string 0;/g" myfile.txt;
  • 我也试试 :cat myfile.txt | sed -i "s/container\s+$v\{/container $v\{\nstring:string-string 0;/g" myfile.txt; sed: -e expression n°1, caractère 56: Échec du pairage de \{
  • 在 sed 命令的第二部分中括号 { 之前的反斜杠,如果您的变量可以以一些数字开头,您还必须更改第一部分的正则表达式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多