修改后的工作解决方案:
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
答案 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
引用了\(\.*\)
部分。