在如下所示的替换命令中将分隔符斜杠(/)更改为pipe(|)sed
echo hello | sed 's|hello|world|'
Run Code Online (Sandbox Code Playgroud)
如何在下面的insert命令中将分隔符斜杠(/)更改为pipe(|)sed?
echo hello | sed '/hello/i world'
Run Code Online (Sandbox Code Playgroud) 因为我是sed的新手,所以我很高兴看到sed不认为\ r \n字符是有效的行分隔符.
有没有人知道如何告诉sed在处理多行文本时,我希望将哪些字符用作行分隔符?
我想从匹配某些字符串的文件中删除行.这些字符串包含斜杠,即'/'.我的问题是虽然您可以使用sed更改分隔符以进行替换,但您似乎无法使用delete选项执行此操作.
即因为$ x中的斜线,这不起作用:
sed --in-place "/$x/d" total-list.csv
Run Code Online (Sandbox Code Playgroud)
其中$ x例如是" http://someurl.com/uri ".但是在使用d选项时你似乎无法更改分隔符(例如,我需要它来代替/).
任何人都可以帮忙吗?
谢谢保罗
我看到了一个bash命令 sed 's%^.*/%%'
通常sed的常用语法是sed 's/pattern/str/g',但在这一个中它用于s%^.*中的s部分's/pattern/str/g'.
我的问题:
什么s%^.*意思?第二部分是
什么意思?%%sed 's%^.*/%%'
我正在用这个命令编写一个shell脚本:
sed -e 's/OLD_ITEM/NEW_ITEM/g'
Run Code Online (Sandbox Code Playgroud)
但我实际上想要做一些包含目录的事情:
sed -e 's/FOLDER/OLD_ITEM/NEW_ITEM/g'
Run Code Online (Sandbox Code Playgroud)
如何忽略正斜杠以便正确读取整行FOLDER/OLD_ITEM?
我试图做一些bash与sed被证明是非常困难的.
我有一个bash脚本,它的第一个参数是日期.
代码想要更改文本文件中的一行以包含传递的日期.这是代码
#!/bin/bash
cq_fname="%let outputfile="/user/cq_"$1".csv";"
sed "29s/.*/\"$ct_fname\"/" file1.sas > file2.sas
Run Code Online (Sandbox Code Playgroud)
这个脚本在第三行失败,我得到一些关于乱码的命令.有没有人知道一个聪明的方法让它工作?如何在引号中加入正斜杠sed?
可能重复:
在sed replace中使用斜杠
我需要找到以下字符串/a/b/c并替换它/r/s/t
它是一个字符串而不是文件夹
/sam/pam/nancy - > /tim/cook/iphone
我在目录中,只需更新具有此行的多个文件.
我花了几个小时搜索,找不到解决方案.我有一个包含超过1,000个PHP文件的目录.我需要替换这些文件中的一些代码,如下所示:
查找:
session_register("CurWebsiteID");
Run Code Online (Sandbox Code Playgroud)
替换为(保存在replacement.txt中:
if(!function_exists ("session_register") && isset($_SERVER["DOCUMENT_ROOT"])){require_once($_SERVER["DOCUMENT_ROOT"]."/libraries/phpruntime/php_legacy_session_functions.php");} session_register("CurWebsiteID");
Run Code Online (Sandbox Code Playgroud)
使用下面的命令,我可以用$(cat replacement.txt)替换模式,而我正在寻找用文本文件的内容替换它们.
正在使用的命令:
find . -name "*.xml" | xargs -n 1 sed -i -e 's/mercy/$(cat replacement.txt)/g'
我也试过使用变量而replacement=code_above;运行调整后的版本,$(echo $replacement)但这也无济于事.
实现这一目标的正确方法是什么?
我正在https://riptutorial.com/sed/example/13753/lines-matching-regular-expression-pattern阅读 sed 教程。
好像
$ sed -n '/[A-Z]/ s| |/|gp' ip.txt
Run Code Online (Sandbox Code Playgroud)
正在从文件中过滤“Add Sub Mul Div”,并将其转换为“Add/Sub/Mul/Div”
考虑到我刚刚阅读了https://www.tldp.org/LDP/abs/html/x23170.html ,我真的不理解正则表达式。
它甚至不匹配打印语法,即:
[address-range]/p
Run Code Online (Sandbox Code Playgroud)
是管道符号'|' 这里交替?
谁能解释一下:
'/[A-Z]/ s| |/|gp'
Run Code Online (Sandbox Code Playgroud)
用英语?
我还发现 's' 之前和 '/' 之后的额外空格是允许的,并且不会做任何事情。正确的语法应该是:
[address-range]/s/pattern1/pattern2/
Run Code Online (Sandbox Code Playgroud)
sed模式的语法检查不严格,容易混淆
如果我做
comment () { sed -i "/$1/s/^/$2 /g" $3 }
comment /dev/sysmsg '#' /tmp/1
comment '*.err' '#' /tmp/1
Run Code Online (Sandbox Code Playgroud)
带输入文件
*.err;kern.notice;auth.notice /dev/sysmsg
fff
ff
Run Code Online (Sandbox Code Playgroud)
然后它就像/在sed分隔符中那样断开,*也被视为正则表达式.
题
有没有办法使它健壮,所以输入字符串$1可以包含我想要的任何东西?或者我需要转移到Perl?