标签: sed

仅删除第一次命中/与 sed 匹配

$ echo -e "AsometAhingA\nsomethingA\nASomethiAng"
AsometAhingA
somethingA
ASomethiAng
$ echo -e "AsometAhingA\nsomethingA\nASomethiAng" | sed "s/A//"
sometAhingA
something
SomethiAng
$
Run Code Online (Sandbox Code Playgroud)

我知道sed "s/A//"删除每一行中的第一个匹配项。但我只想删除文本文件或流中的第一个匹配项。我怎样才能做到这一点?喜欢:sed -i "MAGIC" file.txt

linux fedora sed

6
推荐指数
2
解决办法
1万
查看次数

使用 sed 将字符串替换为 XML 文件中的特殊字符

我很难用 sed 替换 XML 文件中的文本字符串,尽管我使用 grep 查找相同的字符串没有问题。由于要替换的新字符串和旧字符串包含很多特殊字符,我认为最好将它们存储在变量中,而不是使用大量反斜杠:

OLD_STRING='<property name="webServiceHost">${jboss.bind.address}</property>'
NEW_STRING='<!--<property name="webServiceHost">${jboss.bind.address}</property>-->'
Run Code Online (Sandbox Code Playgroud)

字符串似乎按预期存储:

$ echo $OLD_STRING; echo $NEW_STRING
<property name="webServiceHost">${jboss.bind.address}</property>
<!--<property name="webServiceHost">${jboss.bind.address}</property>-->
Run Code Online (Sandbox Code Playgroud)

Grep'ing 确认旧字符串存在于 XML 文件中:

$ grep "$OLD_STRING" jboss-beans.xml
<property name="webServiceHost">${jboss.bind.address}</property>
Run Code Online (Sandbox Code Playgroud)

但是以下 sed 命令不会产生任何输出:

sed -i 's/"$OLD_STRING"/"$NEW_STRING"/g' jboss-beans.xml
Run Code Online (Sandbox Code Playgroud)

知道我在这里缺少什么吗?

linux sed find-and-replace special-characters

6
推荐指数
1
解决办法
3万
查看次数

在正则表达式中打印反向引用

我希望有一种方法让 sed 用替换(而不仅仅是匹配)替换整行,这样我就可以做这样的事情:

sed -e "/$some_complex_regex_with_a_backref/\1/"
Run Code Online (Sandbox Code Playgroud)

并让它只打印反向引用。

这个问题来看,似乎这样做的方法是使用正则表达式来匹配整行,或者使用其他工具(如 perl)。简单地更改regexto.*regex.*并不总是有效(如该问题中所述)。例如:

$ echo $regex
\([:alpha:]*\)day

$ echo $phrase
it is Saturday tomorrow

$ echo $phrase | sed "s/$regex/\1/"
it is Satur tomorrow

$ echo $phrase | sed "s/.*$regex.*/\1/"

$ # what I'd like to have happen
$ echo $phrase | [[[some command or string of commands]]]
Satur
Run Code Online (Sandbox Code Playgroud)

假设以下情况,我正在寻找最简洁的方法来做到这一点:

  • 正则表达式在一个变量中,因此不能根据具体情况进行更改。
  • 我想在不使用 perl 或其他更强大的语言的情况下做到这一点。

shell grep awk sed

6
推荐指数
1
解决办法
8510
查看次数

使用 sed 从字符串中删除数字和空格

我正在尝试删除第一次出现的 digit(s)、点、第二次出现的 digit(s)和单词之前的空格

我想出了这个正则表达式:

sed 's/^[0-9]\+.[0-9]\+\s//' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

文本示例:

2.14 Italien
2.15 Japonais
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的正则表达式不起作用。有问题,\s但我无法确定它是什么......

任何人都可以帮忙吗?

编辑:问题是我只需要删除第一个空格,因为某些文本包含空格,如下所示:

3.15 Chichewa
3.16 Chimane
3.17 Cinghalais
3.18 Créole de Guinée-Bissau
Run Code Online (Sandbox Code Playgroud)

regex sed

6
推荐指数
2
解决办法
1万
查看次数

Linux/Bash:注释与模式匹配的每一行

sed至少可以说对我来说是陌生的。我想遍历一个 C 项目树并注释掉调用函数的每一行LogMsg()。可以实现以下目标的东西:

foreach: line within *.c
  if: line contains "LogMsg"
    prepend "//"
Run Code Online (Sandbox Code Playgroud)

或者。另外,我想看看我是否可以实现相反的目标,尽管我认为这可能会更困难。

我觉得这sed是完成这项工作的合适工具,但我不是批处理文本文件编辑方面的专家。有什么帮助吗?

linux bash sed c

5
推荐指数
1
解决办法
2347
查看次数

用另一个文件的内容替换文件中的关键字的shell脚本

我将创建一个 .sh 以使用其他文件的内容替换文件中的特定关键字。

  • template.html 包含一个唯一的字符串“ PLACEHOLDER
  • 它必须替换为文件“contents.html”的内容

sed 可用于替换关键字:

value="hello superuser"
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
Run Code Online (Sandbox Code Playgroud)

所以我尝试了以下方法:

value=$(<contents.html)
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
Run Code Online (Sandbox Code Playgroud)

并收到以下错误消息:替代模式内未转义的换行符

请问这种情况怎么处理?

谢谢!

shell sed sh find-and-replace

5
推荐指数
1
解决办法
4870
查看次数

如何在不等待整行的情况下为程序输出添加一个字符串?

我有一个使用 SSH 在远程服务器上运行命令的脚本。我想将字符串添加Remote:到输出的每一行,但我不希望每一行都被延迟,直到整行可用。这是我的命令的输出:

$ myproject-db-push my_database_name
从数据库导出...完成
归档数据...完成
上传档案到远程...完成
在远程运行安装脚本
远程:将存档解压缩到临时目录...完成
远程:使用数据库:my_database_name
远程:删除集合:
远程:- my_collection_foo
远程:- my_collection_bar
远程:导入新数据...完成

在这种情况下,我是这样使用的sed

echo "$INSTALLCMD" | ssh -T "deploy@$SERVER" | sed -u "s/^/Remote: /"
Run Code Online (Sandbox Code Playgroud)

问题是,正如我所解释的,没有部分行打印到屏幕上。如果我移除| sed零件,它会按预期工作。首先是这样写的:

正在导入新数据... 

几秒钟后,该行完成:

正在导入新数据...完成

我假设sed只能逐行工作。我尝试将其设置为无缓冲,但它仍然等待整行。有没有另一种方法来实现这一点?

bash sed sh shell-script

5
推荐指数
1
解决办法
485
查看次数

grep -l 输出带空格的文件名

我想循环文件

for f in `grep -rsl "foo" . `: do sed -i -- "s/foo/bar/g" $f; done;

但由于文件名包含空格,因此只要找到空格,就会拆分文件名。

如何将文件名及其空格传递给do块?

bash grep path sed

5
推荐指数
1
解决办法
2385
查看次数

如何用换行符替换换行符?

使用sed到包含某些字符适用于字符串常量使用使文字很简单:

sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"
Run Code Online (Sandbox Code Playgroud)

但是如何对包含换行符的文本文件做类似的事情呢?

awk sed

5
推荐指数
4
解决办法
2万
查看次数

对特定行使用 sed 命令

当我想要的状态存在时,我想更改文件中的单元格。例子:

文件:

id311    vmName1    state0
id312    vmName2    state0
id313    vmName3    state0
Run Code Online (Sandbox Code Playgroud)

我将键入一个脚本,该脚本仅更改一行的状态列。所以如果我输入sed -i 's/state0/state1/g'all state0's be state1。我只想更改一行的状态,例如:

文件:

id311    vmName1    state0
id312    vmName2    state1
id313    vmName3    state0 
Run Code Online (Sandbox Code Playgroud)

如何将sed命令用于带有 use id 的特殊行?注意:id 是唯一的。

linux script bash sed

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

sed ×10

bash ×4

linux ×4

awk ×2

find-and-replace ×2

grep ×2

sh ×2

shell ×2

c ×1

fedora ×1

path ×1

regex ×1

script ×1

shell-script ×1

special-characters ×1