如何匹配 sed 中的空格?在我的数据中,我想匹配所有 3 个以上的后续空白字符(制表符空间)并将它们替换为 2 个空格。如何才能做到这一点?
我正在尝试使用sed数字后跟一个点(例如3., 355.)和一个空字符串来替换所有模式。所以我尝试:
sed 's/\d+\.//g' file.txt
Run Code Online (Sandbox Code Playgroud)
但它不起作用。这是为什么?
检查输出
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";'
Run Code Online (Sandbox Code Playgroud)
在文本编辑器(例如,vi)中显示以下内容:
^[[37mABC
^[[0m
Run Code Online (Sandbox Code Playgroud)
如何从输出文件中删除 ANSI 颜色代码?我想最好的方法是通过各种流编辑器来传输输出。
以下不起作用
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' | perl -pe 's/\^\[\[37m//g' | perl -pe 's/\^\[\[0m//g'
Run Code Online (Sandbox Code Playgroud) 我需要用替换来替换文本文件中的一些文本。通常我会做类似的事情
sed -i 's/text/replacement/g' path/to/the/file
Run Code Online (Sandbox Code Playgroud)
问题是text和replacement都是包含破折号、斜线、黑斜线、引号等的复杂字符串。如果我转义所有必要的字符text,东西很快就会变得不可读。另一方面,我不需要正则表达式的强大功能:我只需要按字面意思替换文本即可。
有没有办法在不使用某些 bash 命令的正则表达式的情况下进行文本替换?
编写一个执行此操作的脚本会相当简单,但我认为应该已经存在一些东西。
我正在使用 sed,GNU sed 版本 4.2.1。我想使用交替“|” 子表达式中的符号。例如 :
echo "blia blib bou blf" | sed 's/bl\(ia|f\)//g'
Run Code Online (Sandbox Code Playgroud)
应该回来
" blib bou "
Run Code Online (Sandbox Code Playgroud)
但它返回
"blia blib bou blf".
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到预期的结果?
我想替换从 输出的字符串grep,我有:
$ npm info webpack | grep version
Run Code Online (Sandbox Code Playgroud)
它输出我
$ version: '2.1.0-beta.12',
Run Code Online (Sandbox Code Playgroud)
但我想要:
$ 2.1.0-beta.12
Run Code Online (Sandbox Code Playgroud)
所以我想我可以使用sed并替换不必要的子字符串来实现这一点。但对我来说困难的部分是:
$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command
Run Code Online (Sandbox Code Playgroud)
怎样才能达到我的目标?
我发现这\n在 Mac OS X 下的 sed中不起作用。具体来说,假设我想将由单个空格分隔的单词分成几行:
# input
foo bar
Run Code Online (Sandbox Code Playgroud)
我用,
echo "foo bar" | sed 's/ /\n/'
Run Code Online (Sandbox Code Playgroud)
但结果是愚蠢的,\n是逃不掉的!
foonbar
Run Code Online (Sandbox Code Playgroud)
在向谷歌咨询后,我找到了一个解决方法:
echo 'foo bar' | sed -e 's/ /\'$'\n/g'
Run Code Online (Sandbox Code Playgroud)
看完文章,还是没明白是什么\'$'\n/g'意思。有人可以向我解释一下,或者是否有其他方法可以做到?谢谢!
假设我有一个目录,其中包含.md所有命名为各种内容的文件。假设我想在每个文件名的前面加上“test”。例如: file a.md, b.md, andc.md会变成test - a.md, test - b.md, and test - c.md。
我将如何通过命令行完成此操作?
sed从文件中删除空字节的咒语是什么?我想:
s/\000//g
Run Code Online (Sandbox Code Playgroud)
但这是剥离零字符串。
s/\x00//g
Run Code Online (Sandbox Code Playgroud)
好像没有效果。我正在尝试在sed脚本中执行此操作,因此我不确定该echo技巧是否有效。
使用仅包含注释(以 # 开头)和 VARIABLE=value 行的单个输入文件,是否可以在找到时替换单个变量的值,否则,如果未找到,则将该对附加到文件末尾?
我当前的方法是在第一遍中删除它,然后在第二遍中将其附加到文件的末尾,但这种方法会弄乱行顺序(也是两个不同的命令):
sed -r "/^FOOBAR=.*$/d" -i samefile &&
sed -r "$ a\FOOBAR=newvalue" -i samefile
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,即。在单个 sed 行中保持行序?如果其他一些实用程序(awk,...)这样做,我会把它接管 sed。
sed ×10
regex ×5
bash ×3
awk ×2
command-line ×2
grep ×1
linux ×1
mac ×1
macos ×1
perl ×1
terminal ×1
text-editing ×1
unix ×1
whitespace ×1