读取由。*操作匹配的变量

时间:2014-08-18 12:51:38

标签: regex variables sed

修改后的工作解决方案:

sed -r "s/(\.*)\[/\1\r[/g"

更好的解决方案:

sed -r "s/(.*)\[/\1\r[/g"

细分:

s/
(\.*)\[    -String to Capture followed by [
/
\1\r[      -Line to replace with
/g" 

I believe for subsequent strings, more of these are made
(\.*) but in the same order they appear from left to right, the variables are referenced.

请尝试将答案保留为带有替换操作描述的工作sed行

我确实想学习如何在sed中使用变量。所以如果你有另一个解决方案,我会全力以赴,但我真的希望学习如何在sed中操作变量。

我试过

$ 1,%1和1

作为这些的组合 \ $ 1,\%1 \ 1 和 / $ 1 /%1/1

无济于事。

这是我的开始工作脚本,用空白部分替换匹配部分。

sed -e "s/\.*\[//g" testfile.txt

我想用脚本做的是替换(*表示任何先前(非空白)字符串)

*[ 

with(中间没有空白行或标签)

*
[

所以我想像

C:\temp>sed -e "s/\.*\[/\1/g" testfile.txt
sed: -e expression #1, char 12: invalid reference \1 on `s' command's RHS

2 个答案:

答案 0 :(得分:2)

我想你想要这样的东西:

$ cat file.txt 
this should be the first line*[and this should be the second
$ sed -r 's/([^*]*\*)/\1\n/' file.txt 
this should be the first line*
[and this should be the second

请注意,使用-r选项意味着您无需逃离parens。如果您不使用-r,则必须将(替换为\(,将)替换为\) 第一个捕获组位于第一个parens

之内
([^*]*\*)

捕获第一个*之前(包括)的所有内容。

替换(\1\n)打印第一个捕获组,后跟换行符,然后是该行的其余部分。

如果您真的对学习sed感兴趣,请查看this tutorial

答案 1 :(得分:1)

要按照您的描述使用变量,您需要\(\)对要引用的部分进行分组。所以在你的情况下你想做

sed -e 's/\(\.*\)\[/\1\r\n[/g' testfile.txt

因此\1引用了\(\.*\)部分。