鉴于此输入:
"hell -- 'this -- world --is'-- beautiful' --thanks-- we'-- are-- here"
Run Code Online (Sandbox Code Playgroud)
我想用 'XXX' 替换单引号之间的每个 '--' 使用sed. 它应该提供以下输出:
输出:“地狱——'这个 XXX 世界 XX-Xis'--美丽的 XX-Xthanks XXX 我们'——在这里”
替换次数可能未知(最多无穷大)。
在以下示例中,sed匹配以 ana或 a开头的行c并打印该行的第一个字符 ( aor c):
$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'.
output:
a
bh
c
dj
ek
fl
Run Code Online (Sandbox Code Playgroud)
但是,与模式不匹配的行也会被打印出来。我如何告诉sed省略与模式不匹配的行?我可以通过将其与grep(如下)结合来获得所需的效果,但我想知道是否sed可以“单独”实现。
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
Run Code Online (Sandbox Code Playgroud) 在临时文件夹中解压缩存档后,我将其用作文件夹中每个文件的 str_replace
find "$tmp" -type f | xargs sed -i "s/${targetsubstring}/${newsubstring}/g"
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
sed: can't read /tmp/tmp.Q18p8BRYcc/steam: No such file or directory
sed: can't read engine.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我的 tmp 变量:
tmp=
mktemp -d
我究竟做错了什么?
更新
archive=`readlink -e $1` #First param is tar archive without file structure (only text files inside)
targetsubstring=$2 #Substring to replace
newsubstring=$3 #Substring to replaced by
tmp=`mktemp -d` #Create a room to unzip our archive
if [ -f "$archive" ]; #Check if archive exist …Run Code Online (Sandbox Code Playgroud) 我想在某个文件中搜索特定的字符串。如果我找到了该字符串,我还想在该行之前(或之后)打印 X 行。
这可以与 grep 或 awk 一起使用,还是我需要组合?
我想有像这样,但与之前或一击,只有第十届毕竟尾随/主导线。
例如,如果我的输入如下所示:
line1 with a pattern
line2
line3
line4 with a pattern
line5
line6
line7 with a pattern
...
Run Code Online (Sandbox Code Playgroud)
例如,我想搜索“模式”一词并输出该行 + 之后 2 行的行,而不是直接跟在模式行之后的行。所以所需的输出是:
line1 with a pattern
line3
line4 with a pattern
line6
line7 with a pattern
...
Run Code Online (Sandbox Code Playgroud) 我想清空每个 HTML 标签的内容,但“保留结构”。
从:
<h5>Holdrs <div class="tooltip" data-tooltip="Accounts with ..."></div></h5>
<div class="value">
<span class="amount">25,241</span><a class="smallnav" href="/c/token/0xB31f66AA3C1e785363F0875A1B7"><svg class="icon-s icon">
Run Code Online (Sandbox Code Playgroud)
我想得到:
<>Holdrs <><><>
<>
<>25,241<><><>
Run Code Online (Sandbox Code Playgroud)
根据我对 sed 的理解,这应该是:
sed 's/<.*>/<>/'
Run Code Online (Sandbox Code Playgroud)
但它只返回:
sed 's/<.*>/<>/'
Run Code Online (Sandbox Code Playgroud)
(在这里测试:https://sed.js.org/? gist=7af9c1c1762a6a93d582502b3d4fe22f)。
我做错了什么?正确的模式是什么?
我正在尝试使用 sed 来提取 URL 查询字符串中许多键值对之一的值部分
这就是我正在尝试的:
echo 'http://www.youtube.com/watch?v=abc&g=xyz' | sed 's@^https?://(www.)?youtube.com/(watch\\?)?.*?v(=|/)([a-zA-Z0-9\-_]*)(&.*)?$@$4@'
Run Code Online (Sandbox Code Playgroud)
但它总是按原样输出输入 URL。
我究竟做错了什么?
更新 1
澄清一些问题:
sed我正在使用的版本,但它是 Mac OS X (10.7.5) 附带的版本。sed$1、$2 等版本中,似乎是匹配项,\1、\2 等给出错误:
sed: 1: "s@^https?://(www.)?yout ...": \4 not defined in the RE 不正确!正如我后来发现的那样。造成混乱的道歉。更新 2
Have updated the sed RE to make it more specific based on suggestion by @slhck below, but the issue remains as before.
Update 3
Based on the man page for this version of sed …
我打算替换文件中的某些字符串;所以我正在使用 sed。
我想替换字符串,而 sed 读取字符串并将文本附加到字符串的中间。
例子:
string in myfile : user=blabla
string that I want to obtain: user=bob
Run Code Online (Sandbox Code Playgroud)
所以我以这种方式运行 sed,让它搜索“user=”字符串,并将其替换为“user=bob”
sed -i 's/user=*/user=bob/' myfile
Run Code Online (Sandbox Code Playgroud)
我得到的是
user=bobblabla
Run Code Online (Sandbox Code Playgroud)
基本上 sed 认为我只想替换那部分,而我想用新字符串替换整个字符串。我认为 * 会告诉 sed 考虑之后的任何事情,但它不起作用。
因为我不知道“blabla”是什么,所以我不能把它放在 sed 命令中。我如何告诉 sed 查找以“user=”开头的字符串并将整个字符串替换为新字符串?
我有这样的 git svn 命令:
git svn log --limit=1 --oneline
它会像这样输出单行:
r12345 | <anything, as it is svn comment inputted by svn-user>
我正在尝试输入 sed 命令,以便获得12345唯一的命令,但是,我无法使其正常工作.. 有很多错误,当前错误是parenthesis not balanced
我的最后一条命令如下:
git svn log --limit=1 --oneline | sed -e 's/r\(0-9) |*/\1/'
我用谷歌搜索过,sed 文档不是很清楚......我对正则表达式不是很擅长,我最好的经验是使用git --grep具有良好文档的简化正则表达式。
如果重要的话,环境是 MacOSX 终端。
编辑:
sed -n 's/r\(0-9*\)/\1/ 有效,但返回空字符串。
鉴于此test.file内容,我在 Ubuntu 16.04 上:
Hello \there
Run Code Online (Sandbox Code Playgroud)
为什么会这样(从命令行):
sed 's#\\there#where#' test.file
Run Code Online (Sandbox Code Playgroud)
工作,但是这个:
sed "s#\\there#where#" test.file
Run Code Online (Sandbox Code Playgroud)
才不是?是配置的问题吗?
前者成功地替换了模式,而后者似乎没有找到任何匹配项。
我需要在脚本的替换文本中使用一个变量,所以我(我猜我)需要在 sed 命令周围加上双引号。
我想输出由find.
我的一个文件的名称中有空格,这导致du为其返回“没有这样的文件或目录”消息。
chris@chris-x1c6:/media/E/2Videos$ du -ch $(find . -maxdepth 1 -iname "*syed*")
du: cannot access './The': No such file or directory
du: cannot access 'Case': No such file or directory
du: cannot access 'Against': No such file or directory
du: cannot access 'Adnan': No such file or directory
du: cannot access 'Syed': No such file or directory
du: cannot access 'S01E01': No such file or directory
du: cannot access '1080p.WEB.H264-AMRAP.mkv': No such file or directory
4.0G ./The.Case.Against.Adnan.Syed.S01E02.In.Between.the.Truth.1080p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv …Run Code Online (Sandbox Code Playgroud)