这在任何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命令的管道。
更新:低代表在这里,
我有一个类似这样的文件:
A
B
C
D
E
F
G
H
I
J
K
L
我想让它像这样
A,B,C,D
E,F,G,H
我假设我会使用sed,但实际上我甚至不确定这是否是最好的工具。我对使用Linux系统上常见的任何东西都持开放态度。
在perl中,我是这样做的。它可以工作,但它很脏,而且后面有一个逗号。希望有更简单的东西:
$ perl -ne 'if (/^(\w)\R/) {print "$1,";} else {print "\n";}' test
A,B,C,D,
E,F,G,H,
I,J,K,L,
这是我的样本文件
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
我有一个shell脚本,可以在这样的文件夹中打印appimage文件名
#! /bin/bash
Dir="$HOME/Applications/"
Dir2="$HOME/Downloads/"
cd -P "$Dir"
for f in *.AppImage; do
z=$(echo $f | head -n1 | awk '{print $1;}')
echo $z
done
现在输出如下:
Altus-4.8.5-x86_64.AppImage
GitHubDesktop-linux-3.2.0-linux1.Ap
我正在尝试用一个换行符替换a6数字后面的空格,这是我尝试使用的
sed 's/a\d{6}\s\+/\n/' old > new
例如:
a123456 this is a sentence
将成为:
a123456
this is a sentence
我也对linux中允许我这样做的任何其他程序开放,比如awk、perl或bash。
我有一个像这样的文件
line one
line two
line three
line four
我希望它看起来像这样(我希望第2行和第3行合并成一个)
line one
line two line three
line four
我尝试了以下几点:根据我的研究,我应该做我想做的事情:
$ sed '2s/\n/ /' test.txt > test2.txt
然而,test2.txt看起来是这样的
line one
line two
line three
line four
我在Solaris上看到了一些与Linux不同的引用。这是我服务器的详细信息
$ uname
有两个文件file.txt和file1.txt
$ cat file.txt
Linux
Administration
Scripting
Tips and Tricks
Windows
Administration
Database
Administration of Oracle
Administration of Mysql
Security
Network
Online\
Security
Productivity\
Google Search\
Tips
"Web Based Time Tracking,
Web Based Todo list and
Reduce Key
因此,我试图用多行替换文件中的行内容,但无法使其工作。详情如下:
文本文件:/home/user1/file1.txt
文件内容:
The quick brown fox
The quick brown fox jumps over the lazy fat dog
Little brown and the lazy fat dog
Lazy dog and the fat lion
string1="The quick brown fox jumps over the lazy fat dog"
string2="The quick little black fox
我发现了几个相关的问题,但这些问题都不符合我的需要,因为我是一个真正的初学者,我无法理解它。
我有一个文本文件,其中有这样的条目,用空行分隔:
example entry &with/ special characters
next line (any characters)
next %*entry
more words
我希望输出合并行,在中间放置逗号,并删除空行。也就是说,这个例子应该如下所示:
example entry &with/ special characters, next line (any characters)
next %*entry, more w
我希望替换文件中的ASCII/English字符,并将unicode字符保留在Linux环境中。
INSERT INTO text (old_id,old_text,old_flags) VALUES (2815829,'[[चित्र:Youth-soccer-indiana.jpg|thumb|300px|right|बचपन का खेल.एसोसिएशन फुटबॉल, ऊपर दिखाया गया है, एक टीम खेल है जो सामाजिक कार्यों को भी प्रदान करता है।]]\n\n\'\'\'खेल\'
我试图(用sed)替换一整行,其中包含一个特定的单词和末尾的换行符。在这里,测试文件:
this # target for substitution
this is a test
another test?
现在,我已经在这里做了已发布,从连系帖子中,我了解了如何以某种方式做到这一点:
sed 's/^this$/test/g' testfile
这是可行的,至少看起来是这样的,因为单词this末尾的换行符仍然存在:
test # target for substitution but newline is still there
this is a test
another