这在任何Linux上都能很好地工作:
$ echo foo bar | sed -n '/foo/{/bar/{;p;}}'
foo bar
但在OSX古老的BSD变体上却失败了:
❯ echo foo bar | sed -n '/foo/{/bar/{;p;}}'
sed: 1: "/foo/{/bar/{;p;}}": extra characters at the end of } command
我是不是错过了什么魔法咒语?有办法用便携的方式写吗?
我不想恢复到grep | grep | grep命令的管道。
更新:低代表在这里,
我正在尝试在MacOSX终端上运行这个命令,它最初是打算在Linux上运行的。
sed '1 i VISPATH=/mnt/local/gdrive/public/3DVis' init.txt >> ~/.bash_profile
但它给了我一个错误:
command i expects \ followed by text.
有没有办法修改上面的命令,使其在MacOSX终端上工作
在Linux上,我使用下面的代码来获取[test]行之后的下两行:
sed -n '/\[test\]/{n;p;n;p}' my-file
在Mac上,我得到:
sed: 1: "/\\[test\\]/{n;p;n;p}": extra characters at the end of p command.
是否有一个表达式在两个平台上都有效,或者在Mac上必须使用完全不同的命令?
我的文件包含以下几行
File.txt
Unix is good
Linux and unix is different?
Linux is also good, then what about unix?
这里我要输出
(1st line blank)
Linix and
Linux is also good, then what about
在这里vi命令或任何其他命令都会给出这个输出?搜索特定的单词,如果这是对的话,然后删除那个词,然后删除该行中的所有单词。
每当我启动apache server(安装在EC2上)时,它都会显示带有"Amazon Linux AMI test Page“标题的测试页面。我想用类似于"Linux AMI - Started“这样的东西来更改措辞。(注意:我不想用我的文本替换整个页面,我想要相同的页面,但标题是"Linux AMI - Started“,而不是"Amazon Linux AMI Test Page”。我在下面试过了,但不幸的是它不起作用。
sed /Amazon Linux AMI测试页/Linux AMI - Started/g‘/var/wwww/html/index.
案文如下:
We will now present the Linux ls command
... here description of ls
We will now present the Linux cd command
... here description of cd
... more description
Done
下面的sed替换正则表达式应用于文本。
sed 's/.*Linux \(.*\) .*/\1:/' ex2.txt
,它提供以下输出
ls:
... here description of ls
cd:
...
尝试使用Sed的美丽,所以我不需要手动更新几百个文件。我会注意到我的雇主只允许使用Win8 (joy),所以我整天使用Cygwin,直到我可以在家里使用我的Linux盒。
以下内容适用于Linux (bash)命令行,而不是Cygwin
> grep -lrZ "/somefile.js" . | xargs -0 -l sed -i -e 's|/somefile.js|/newLib.js|g'
sed: can't read ./testTarget.jsp: No such file or directory
# works
> s
我在脚本中使用下面的代码,它应该匹配hosts.test中的"title随机Linux服务器“,并在2行匹配字符串之后将t3文件的文本插入到hosts.test中。但它带来了一些错误。
sed -i.bak '/^title AHS - zarriot CBTS random Linux Servers$/ {N;N; r t3}' hosts.test
有人能帮我吗?
这可能是一个重复的问题,但我有点卡住了:我有一个包含以下内容的文件test.txt:
# To push each commit to a remote, put the name of the remote here.
# (eg, "origin" for git). Space-separated lists of multiple remotes
# also work (eg, "origin gitlab github" for git).
PUSH_REMOTE=""
我只想将包含PUSH_REMOTE=""的文件中
我正在学习sed,所以在这个上下文中,我试图替换单词'line‘的第二次出现。因此,我发布了以下命令:
(zet:pc:~/text) sed 's/line/LINUX/2' mytextfile
this is line 1
this is line 2
this is line 3
this is line 4
this is line 5
但是从输出中,你可以看到“sed”并没有取代世界“线”的第二次出现。我在这里犯了什么错误吗?
我正在尝试替换文件中出现的第一个字符串。例如,试图用linux取代第一个foo
sample.txt
Hi foo bar
This is again foo bar.
命令:sed '0,/foo/s//linux/' sample.txt
上述命令的实际输出(基本不变)
Hi foo bar
This is again foo bar.
我的预期产出如下
Hi linux bar
This is again foo bar.
这里有人能帮忙吗?
我想用sed将…。中的内容替换为目标key=new_string
more /tmp/file
my.uri=http://[linux123]:8080
我们试试这个
key=new_string
sed s"/\[*\]/$key/g" /tmp/file
但文件没有更改
more file
my.uri=http://[linux123]:8080
我的苏醒怎么了?
预期结果应为(不带方括号)
more file
my.uri=http://new_string:8080
这是我的样本文件
user@linux:~$ cat file.txt
Line 1
Line 2
Line 3
Line 4
Line 5
user@linux:~$
我可以用grep -A2 'e 2' file.txt打印第2-4行。
user@linux:~$ grep -A2 'e 2' file.txt
Line 2
Line 3
Line 4
user@linux:~$
我也可以用grep -n打印出行号。
user@linux:~$ grep -nA2 'e 2' file.txt
2:Line 2
3-Line 3
4