- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我爱sed
但我讨厌在其正则表达式中需要多少反斜杠。例如,下面是一个 sed
命令,它将从每行输入中取出前 8 个单词:
sed -n 's/^\(\S\+\s\+\)\{8\}\(.*\)/\2/p'
丑陋。
几乎每个字符前面都有一个反斜杠。如果 sed
假设特殊字符在默认情况下是特殊的,那就更好了。
下面是我希望表达式的样子:
s/^(\S+\s){8}(.*)/\2/p
有什么办法可以实现吗?
最佳答案
作为Avinash Raj has pointed out , sed
默认使用基本正则表达式 (BRE) 语法, (这需要 (
, )
, {
, }
前面有 \
以激活其特殊含义),-r
选项切换到扩展正则表达式 (ERE) 语法,这将 (
, )
, {
, }
视为特殊的,无需在 \
前面。
除了这些转义序列:
\^ \. \[ \$ \( \) \|
\* \+ \? \{ \\
POSIX standard为 ERE 中的其他转义序列显式保留行为未定义。
An ordinary character is an ERE that matches itself. An ordinary character is any character in the supported character set, except for the ERE special characters listed in ERE Special Characters. The interpretation of an ordinary character preceded by a backslash (
'\'
) is undefined.
由于行为未定义,实现可以自由地提供语法扩展。
作为rici在评论中指出,\s
和 \S
是 GNU 扩展。 GNU 实现还提供了 the following extensions对于正则表达式和替换字符串语法(对于 BRE 和 ERE):
\a \f \n \r \t \v
\cX
\dXXX
\oXXX
\xXX
以及以下仅用于正则表达式的扩展:
\w \W
\b \B
\'
\`
加上这些未记录/记录不足的扩展:
\s \S
\< \>
如果代码从未在 sed 的非 GNU 实现上运行,则您当前的代码是可以接受的。
关于regex - GNU sed 中是否还有另一个正则表达式 "flavor"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28401480/
我有数百个文件,命名如下: RG1-t.txt RG1-n.txt RG2-t.txt RG2-n.txt 等等... 我想使用GNU并行在它们上运行脚本,但是我很难获得文件的基本名称,因此RG1,R
从例子 seq 1 100 | parallel -I @@ \ > 'mkdir top-@@;seq 1 100 | parallel -X mkdir top-@@/sub-{} 怎么办-X ,
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我有一个简单的 Makefile: VAR := aaa include a.inc VAR += bbb 和a.inc some_target: $(VAR) @echo "refe
按照指南制作新类(class)。我可以使用 gst 命令制作新的或加载图像文件 (.im)。我输入代码来创建一个 Account 类,然后可以创建一个新类。 问题如何在关闭 gst 窗口之前将类保存到
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
我想使用 GNU screen 来监视这样的串行 USB 端口: $ screen /dev/ttyUSB0 115200 但我需要调整一些终端线路设置。我已经进行了几次尝试,但似乎都没有奏效。例如,
我已阅读全文 documentation对于 gnu 排序和在线搜索,但我找不到 --buffer-size 选项的默认值是什么(它决定了程序在运行时使用多少系统内存)。我猜它是根据系统总内存以某种方
我正在使用 parallel --keep-order --line-buffer --halt 2 在一堆命令上并行调用 GNU .每隔一段时间,其中一个命令就会失败,并且 GNU 并行打印: p
这个问题与问题 2543127 的精神相似。 . 我有一个带有头文件列表的 gnu makefile。每个头文件可能位于不同的目录中,例如, HEADERS = $(wildcard *.h) $(w
假设我有以下 GNU make 目标: create_dir: @mkdir objects build_asm: $(ASM_FILES) @echo
默认情况下,当您在 GNU Screen 中创建新窗口时,它将在调用 Screen 的目录中启动。我想在当前所在窗口的当前工作目录的 GNU Screen 中启动一个新窗口。我该怎么做? 最佳答案 查
我想在几个输入上运行几个长时间运行的进程。例如。: solver_a problem_1 solver_b problem_1 ... solver_b problem_18 solver_c pro
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 8年前关闭
我可以看到在多个输入上运行并行作业是多么容易,但是有没有其他方法可以通过将命令放入文件并重复多次来并行运行同一作业多次? parallel -j+0 ::: './dosomejob.sh' 但是告诉
所以我一直在尝试寻找一些关于 GNU screen 实际上如何在 high 下工作的信息,而不必真正阅读源代码,但我一直无法这样做。 screen 做了什么,即使在终端 session 关闭时它也能保
在调查崩溃时,我遇到了以下代码片段并立即意识到 mov 指令实际上应该是 movq 以获得正确的 64 位寄存器操作。 #elif defined(__x86_64__) unsigned l
我安装了 indent使用 brew感谢命令 brew install gnu-indent所以现在我有 gnu-indent-2.2.10到目前为止安装在我的 MacOS X 上,非常好。我的问题是
考虑这个Makefile: .PHONY: all all: main.txt main.txt: build/main.txt cp build/main.txt . %/main.txt:
假设目录输入中有 1000 个扩展名为 .xhtml 的文件,并且这些文件的某个子集(输出路径在 $(FILES) 中)需要通过 xslt 转换为目录输出中具有相同名称的文件.一个简单的 make 规
我是一名优秀的程序员,十分优秀!