是否有一个sedtodo就地编辑的调用,没有可在Linux和Mac上运行的备份?虽然BSD sed随OS X似乎需要sed -i '' …,在GNU sedLinux的发行版通常都与解释的报价为空,输入文件名(而不是备份扩展),并且需要sed -i …替代.
是否有任何命令行语法适用于这两种风格,所以我可以在两个系统上使用相同的脚本?
我正在尝试替换Mac OS X上的Makefile中的字符串,以便交叉编译到iOS.该字符串嵌入了双引号.命令是:
sed -i "" 's|"iphoneos-cross","llvm-gcc:-O3|"iphoneos-cross","clang:-Os|g' Configure
Run Code Online (Sandbox Code Playgroud)
错误是:
sed: RE error: illegal byte sequence
Run Code Online (Sandbox Code Playgroud)
我试着逃避双引号,逗号,破折号和冒号,没有任何快乐.例如:
sed -i "" 's|\"iphoneos-cross\"\,\"llvm-gcc\:\-O3|\"iphoneos-cross\"\,\"clang\:\-Os|g' Configure
Run Code Online (Sandbox Code Playgroud)
我有一点时间调试这个问题.有谁知道如何sed打印非法字节序列的位置?或者有谁知道非法字节序列是什么?
我想知道是否有可能编写一个100%可靠的sed命令来转义输入字符串中的任何正则表达式元字符,以便它可以在后续的sed命令中使用.像这样:
#!/bin/bash
# Trying to replace one regex by another in an input file with sed
search="/abc\n\t[a-z]\+\([^ ]\)\{2,3\}\3"
replace="/xyz\n\t[0-9]\+\([^ ]\)\{2,3\}\3"
# Sanitize input
search=$(sed 'script to escape' <<< "$search")
replace=$(sed 'script to escape' <<< "$replace")
# Use it in a sed command
sed "s/$search/$replace/" input
Run Code Online (Sandbox Code Playgroud)
我知道有更好的工具可以使用固定字符串而不是模式,例如awk,perl或python.我想证明是否有可能sed.我会说让我们专注于基本的POSIX正则表达式,以获得更多乐趣!:)
我已经尝试了很多东西,但任何时候我都能找到一个打破了我的尝试的输入.我认为保持它是抽象的,因为script to escape不会导致任何人走错方向.
顺便说一下,讨论在这里提出来了.我认为这可能是收集解决方案的好地方,可能会破坏和/或详细说明.
在 OSX 上,我需要从我的 CSV 文件中删除行尾 CR ( \r) 字符(表示为^M的输出cat -v):
$ cat -v myitems.csv
Run Code Online (Sandbox Code Playgroud)
输出:
strPicture,strEmail^M
image1xl.jpg,me@example.com^M
Run Code Online (Sandbox Code Playgroud)
我用 sed 和 perl 尝试了很多选项,但没有任何效果。
有任何想法吗?
我有一个我命名的文件poscar1.cif,我想在此文件的特定行插入变量的内容.
例如,line 24,当前读取:
_cell_length_a
Run Code Online (Sandbox Code Playgroud)
我想添加我的变量的内容a(在我的函数中定义a=5.3827),这样该行现在读取:
_cell_length_a 5.3827
Run Code Online (Sandbox Code Playgroud)
有没有办法用sed或awk做到这一点?我正在使用bash脚本来完成此任务(不幸的是,完整的脚本太大而无法发布).