标签: regular-expression

vim:在替换命令中使用搜索中的字符串

我经常使用 vim /search 命令来验证我的正则表达式(只是为了看看它匹配什么)。之后我通常使用:%s替换命令,在那里我使用搜索中的正则表达式作为要替换的字符串,例如我首先查找这样的字符串:

/TP-\(\d\{5\}\)-DD-\d\{3\}
Run Code Online (Sandbox Code Playgroud)

它与我想要的完全匹配,所以我进行了替换:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g
Run Code Online (Sandbox Code Playgroud)

但是我必须在这里再次编写整个正则表达式。通常那个正则表达式要长得多,这就是我寻找解决方案的原因:

是否有任何现有的快捷方式或 vim 脚本可以将该搜索模式直接粘贴到替换命令中?

我在终端中使用 vim(没有 gvim)。

vim regular-expression

17
推荐指数
1
解决办法
1970
查看次数

什么\?在正则表达式中是什么意思?

以下命令用于搜索 7 位电话号码:

grep "[[:digit:]]\{3\}[ -]\?[[:digit:]]\{4\}" file
Run Code Online (Sandbox Code Playgroud)

代表什么\?

grep regular-expression

17
推荐指数
3
解决办法
6万
查看次数

如何在 awk 中使用正则表达式作为字段分隔符?

我正在尝试使用正则表达式作为awk. 从我的阅读来看,这似乎是可能的,但我无法正确理解语法。

rpm -qa | awk '{ 'FS == [0-9]' ; print $1 }'
awk: cmd. line:1: { FS
awk: cmd. line:1:     ^ unexpected newline or end of string
Run Code Online (Sandbox Code Playgroud)

想法?如果不是显而易见的,目标是获取没有版本号的软件列表。

awk regular-expression

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

如何使用正则表达式和 AWK 进行字符串替换?

假设文件中有一些文本:

(bookmarks
("Chapter 1 Introduction 1" "#1"
("1.1 Problem Statement and Basic Definitions 23" "#2")
("Exercises 31" "#30")
("Notes and References 42" "#34"))
)
Run Code Online (Sandbox Code Playgroud)

"如果有一个,我想给每个数字加上 11,然后在每一行中加上一个,即

(bookmarks
("Chapter 1 Introduction 12" "#12"
("1.1 Problem Statement and Basic Definitions 34" "#13")
("Exercises 42" "#41")
("Notes and References 53" "#45"))
)
Run Code Online (Sandbox Code Playgroud)

这是我使用 GNU AWK 和正则表达式的解决方案:

awk -F'#' 'NF>1{gsub(/"(\d+)\""/, "\1+11\"")}'
Run Code Online (Sandbox Code Playgroud)

即,我想替换(\d+)\"\1+10\"\1代表 的组在哪里(\d+)。但它不起作用。我怎样才能让它工作?

如果 gawk 不是最好的解决方案,还有什么可以使用的?

awk text-processing regular-expression

17
推荐指数
3
解决办法
10万
查看次数

用于可视化构建正则表达式的软件?

我经常需要创建在脚本中使用的正则表达式(主要是在 中使用时sed),但是,我发现,有时正则表达式会变得非常复杂,我很难理解和编辑。是否有任何软件可以让人们直观地创建正则表达式的代码,然后我可以将其复制并粘贴到脚本中?

software-rec gui regular-expression

17
推荐指数
2
解决办法
7892
查看次数

grep -v 的 Python 等价物是什么?

我喜欢grep -v。我用它所有的时间。但我也在用 python 做一些文本处理,我缺少一件至关重要的事情。

通常,我grep -v习惯从文本中去除无关的东西。

例如,

$ grep -v '[a-z]'
# (I manually review this output to confirm that I don't want those lines)

$ grep '[a-z]' > linesiwanted
Run Code Online (Sandbox Code Playgroud)

但是如何在 Python 中匹配正则表达式的补码?例如,\w?

grep python text-processing regular-expression

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

查找两个特定字符或字符串之间的文本

说我有这样的行:

*[234]*
*[23]*
*[1453]*
Run Code Online (Sandbox Code Playgroud)

where*代表任何字符串(除了形式为 的字符串[number])。如何使用命令行实用程序解析这些行并提取括号之间的数字?

更一般地,它的这些工具cutsedgrepawk将适合这样的任务?

text-processing regular-expression

17
推荐指数
2
解决办法
9万
查看次数

用 sed 替换一行中第一次出现的模式,以替换文件中的所有行

是否可以在一个班轮中完成?

我有这样的输出:

"First line" - Description  
" Second line" - Description  
"Third line" - Description  
" Fourth line" - Description  
Run Code Online (Sandbox Code Playgroud)

此输入是自动生成的。

我想用每行的(引号)替换第一次出现的"(引号+空格)"。如果我在全局范围内应用替换,它也会更改line" -to 的每次出现line"-,所以我想知道是否可以使用 sed one liner 来完成此操作。

我已经尝试使用^这样的

sed -r ':a;N;$!ba;s/(\^\" )/\"/g'
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它不能代替任何东西。我试过

sed -r ':a;N;$!ba;s/(^|\" )/\"/g'
Run Code Online (Sandbox Code Playgroud)

它替换了所有的出现。我刚刚开始使用 sed,所以我真的不知道我做错了什么。

我在这里缺少什么?

sed regular-expression

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

如何减少AWK中正则表达式的贪婪?

我想在awk. 下面是一个例子:

echo "@article{gjn, Author =   {Grzegorz J. Nalepa}, " | awk '{ sub(/@.*,/,""); print }'
Run Code Online (Sandbox Code Playgroud)

是否可以编写一个选择较短字符串的正则表达式?

@article{gjn,
Run Code Online (Sandbox Code Playgroud)

而不是这个长字符串?:

@article{gjn, Author =   {Grzegorz J. Nalepa},
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果:

 Author =   {Grzegorz J. Nalepa},
Run Code Online (Sandbox Code Playgroud)



我还有一个例子:

echo " ,文章{gjn, Author = {Grzegorz J. Nalepa}, " | awk '{ sub(/ , [^,]*,/,""); 打印 }'
      ? ?^^^^^

请注意,我将输入字符串和正则表达式的第一个位置中的@字符更改为逗号 ( ,) 字符(也更改.*[^,]*)。是否可以编写一个选择较短字符串的正则表达式?

, Author =   {Grzegorz J. Nalepa},
Run Code Online (Sandbox Code Playgroud)

而不是更长的字符串?:

,article{gjn, Author =   {Grzegorz J. Nalepa},
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果:

,article{gjn
Run Code Online (Sandbox Code Playgroud)

awk regular-expression

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

为什么我必须两次转义“点”?

我知道我们可以转义像*(){}$with\这样的特殊字符,以便将其视为文字。
例如\*\$

但是如果.我必须做两次,\\.否则它被认为是特殊字符。例子:

man gcc | grep \\.
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

grep shell-script quoting regular-expression escape-characters

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