在SO的帮助下,我能够更正sed命令,这样我就可以使用变量(使用‘而不是’,而不是使用g作为全局变量)。
然而,我正在努力使命令正确工作。
为了给您提供一些上下文,我有一个包含大量文本行的文件,一些行包含一个或多个标记。这些标签的格式如下:
[#$key#] - i.e #[#] is used to indicate the presence of a key
然后,我有一个内部数组对象,它存储一个字符串值,其中包含每个键和一个对应的值,格式如下:
$key=$value
我要做的是在使用全局sed替换将$key替换为数组对象中的相应值的同时,禁止包含标记的文件。
问题是我的grep/sed
我有一些html文件,只想提取包含以下标签的行:
head
p
我使用sed提取文件的这些部分,如下所示:
grep "<head>" myfile.html | sed -e 's%\(head\)\(.*\)\(/head\)%title\2\/title%'
grep "<p>" myfile.html | sed -e 's%\(<p>\)\(.*\)\(</p\)\(>\)%\2\\%'
一切正常,但我在每一行的末尾得到"\“字符。我怎样才能克服这个问题?
我知道单引号和双引号在sed表达式中存在差异,但我不知道sed a和sed s表达式之间存在差异。
对于sed s表达式,\t以单引号和双引号正确地翻译为制表符。\\t在双引号中也做了同样的事情。
# '\t' works for single quotes
$ echo -e "abc\n123" | sed 's|abc|&\n\tdef|'
abc
def
123
# '\\t' fails for single quotes
$ echo -e "abc\n123" | sed '
工具:Git
Problem:尝试在目录中的每个文件顶部插入文本"\connect “。
码
for f in $DIR/*.sql; do
sed -i "1i \\\connect central" $f
done
这确实会尝试编辑内联并插入我的文本,但是三个反斜杠(就像我在任何地方都读过的一样)并不能像我所期望的那样创建一个反斜杠。相反,我得到了:
我还尝试了一些类似于以下内容的变体:
for f in $DIR/*.sql; do
sed -i -e "1i `\\\connect central`" $f
done
但这会导致
我正在尝试使用sed在一个文本文件中查找以下行... $this->db = new \mysqli("connection"); 我有这个,但它不工作... sudo sed -i "/$this->db = new \mysqli/c\ \replace with this" /home/me/test.txt 我哪里错了,是不是\mysqli中的斜杠阻止了它的工作?
我在shell脚本中使用sed来编辑文件系统路径名。假设我想要替换
/foo/bar
使用
/baz/qux
但是,sed的s///命令使用正斜杠/作为分隔符。如果这样做,我会看到一条错误消息,如下所示:
▶ sed 's//foo/bar//baz/qux//' FILE
sed: 1: "s//foo/bar//baz/qux//": bad flag in substitute command: 'b'
类似地,有时我想选择行范围,比如pattern foo/bar和baz/qux之间的行。再说一次,我不能这样做:
▶ sed '/
我想用.bat脚本中的sed命令替换文本文件的第二行。我可以在不使用任何特殊字符的情况下执行此操作,例如:
sed -i 2s/.*/SUCCESS/ file.txt
但是,我要插入的文本如下:
outfolder = "G:\Folder with Space and Quotes\"
如果我使用以下命令:
sed -i 2s/.*/outfolder = "G:\Folder with Space and Quotes\"/ file.txt
结果是一个错误:
sed: -e expression #1, char 15: unterminated `s&