标签: sed

使用 sed 在匹配字符串的行尾插入文本

我在文本文件中有一行包含分配给变量的项目列表......

ITEMS="$ITEM1 $ITEM2 $ITEM3"
Run Code Online (Sandbox Code Playgroud)

我想编写一个 bash 脚本,它使用 sed 来查找与 ITEMS 匹配的行,并将另一个项目附加到双引号内的列表末尾,因此结果...

ITEMS="$ITEM1 $ITEM2 $ITEM3 $ITEM4"
Run Code Online (Sandbox Code Playgroud)

此外,我将要添加的项目编号存储在变量中,假设它是 $number。所以我试图让它添加 $ITEM4$number 并让它用我分配给该变量的任何内容替换 $number ,假设在这种情况下它是数字 4 。我怎样才能最好地做到这一点?谢谢!

bash sed

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

用 sed 用斜线字符替换字符串

我有一个目录树,里面有几个文件。
我想在每个文件中替换index.html一个字符的字符串/
由于/是一个特殊字符,我如何指示 linux“sed”命令以便我可以更改目录下的所有文件?

谢谢!

sed

-1
推荐指数
1
解决办法
4532
查看次数

如何利用bash中每行的首字母大写?

我正在寻找一个命令,将bash中每行的第一个字母大写.

其实我用过这个命令:

sed 's/^\(.\)/\U\1/'
Run Code Online (Sandbox Code Playgroud)

但我需要使用另一个命令而不是"\ U"..

linux bash sed capitalization uppercase

-1
推荐指数
1
解决办法
4942
查看次数

如何将字符串插入文件的倒数第二行

我有一个关于如何将字符串插入文件的倒数第二行的问题.

例如:

$ cat diff_a.txt
students
teacher
mike
john

$ cat diff_b.txt
python
bash shell
Java
Run Code Online (Sandbox Code Playgroud)

预期结果应为:

$ cat diff_b.txt
python
bash shell
mike
Java
Run Code Online (Sandbox Code Playgroud)

如果我使用以下命令,它会将字符串"mike"追加到diff_b.txt的最后一行

$ grep mike diff_a.txt >> diff_b.txt
$ cat diff_b.txt
python
bash shell
Java
mike
Run Code Online (Sandbox Code Playgroud)

题:

How should I put "mike" into second to last line of diff_b.txt ?
Run Code Online (Sandbox Code Playgroud)

bash awk sed

-1
推荐指数
1
解决办法
2438
查看次数

从文件A复制并使用sed粘贴到文件B.

我有两个XML文件,我想

  1. 在文件A中查找特定的XML节点
  2. 复制它
  3. 在文件B中找到特定部分
  4. 粘贴复制的节点.

sed已经在我的机器上使用但是我遇到了找到正确的正则表达式配置的麻烦.

文件A的示例:

<Containers>
  <Container id="1">    <-- to be copied start
    blubb
  </Container>    <-- to be copied end
  <Container id="2">blobb</Container>
</Containers>
Run Code Online (Sandbox Code Playgroud)

文件B的示例:

<Containers>
  <Container id="99">blibb</Container>
</Containers>
Run Code Online (Sandbox Code Playgroud)

所需的输出文件B的示例通过切割<Container id="1"</Container>:

<Containers>
  <Container id="1">    <-- copied here start
    blubb
  </Container>    <-- copied here end
  <Container id="99">blibb</Container>
</Containers>
Run Code Online (Sandbox Code Playgroud)

我知道它会更清晰,也许更容易使用XML解析器和其他工具,但我需要使用sed,我不是一个非常有经验的sed/regex用户.我只是用"替代"和"删除"玩了一下,但这就是全部......

我可以澄清一下:

  • 我需要使用sed,因为这是机器上唯一可用的工具.
  • 我知道,我可以用其他编程语言和其他工具来做到这一点,但这不可能在这里.运行的机器不在我的控制之下!

我知道我不应该使用正则表达式来处理XML/XHTML - 我知道但是地球要复杂得多.

我是从cygwin运行的.

更新1:

由于几个响应,似乎无法找到sed的解决方案.感谢所有了解问题,并试图帮助!

如果有人仍然看到了潜在的解决方案,那么请告诉我.但挑战在于使用sed.我已经使用了带有boost,QT,C#,Java等的XML解析器......但这不是问题,如果我可以选择......我做不到.

更新2:

谢谢大家,尤其是Benjamin W.绝对有可能使用sed来解决这个问题但是如前所述,如果你有可能使用xml解析lib和其他技术那么这应该是要走的路.

对我来说,一个非技术问题(伪安全指南)已经用现有的技术解决方案解决了.

这是我的最终解决方案:

sed "/<Container id=\"1\">/,/<\/Container>/!d" fileA.xml | ^
sed -i "/<Containers>/r /dev/stdin" fileB.xml …
Run Code Online (Sandbox Code Playgroud)

regex sed

-1
推荐指数
1
解决办法
71
查看次数

bash:添加所有单词双引号

我希望加上所有单词的双引号.

这个例子.

ABC,DEF ,, JKL

我想转换:

"ABC", "高清", "", "JKL"

然后,我尝试转换,它失败了.我该怎么做?

sed "s/[^ ][^ ]*/'&'/g"
Run Code Online (Sandbox Code Playgroud)

bash sed

-1
推荐指数
1
解决办法
61
查看次数

如何在bash中提取文件第一行定义的版本字符串

我想提取在文件第一行中定义的版本字符串.

file.txt的

version="11.22.33" project="foo"
this is a foo project with version "11.22.33" written in some language of version "44.55.66"
Run Code Online (Sandbox Code Playgroud)

我想要一个只读取文件第一行并从中提取11.22.33并停止的命令.

我试过variable_str=$(sed -rn "0,/<pattern_for_version>/p")但这会返回整行,而不仅仅是匹配的模式.

bash sed

-1
推荐指数
1
解决办法
94
查看次数

使用sed删除两个匹配模式之间的所有行,包括匹配的行

我需要删除文件中匹配的特定模式和匹配的行之间的行。

在下面的代码中,我要删除对象Host“ kali” {中的行到下一次出现的}(而不是最后一次出现的})。并在删除后删除空白区域。

object Host "linux" {
import "windows"
address = "linux"
groups = ["linux"]
}


object Host "kali" {
import "linux"
address = "linux"
groups = [linux ]
}


object Host "windows" {
import "linux"
address = "linux"
groups = ["windows" ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码

clear
echo -e  "Enter the host to delete in config file"
cat > deletionfile.txt
clear
while read host
do
loc=`grep -il 'object.*Host.*"$host"' /home/afrith/config-file/*.conf`
sed -i "/^object.*Host.*\"$host\".*{$/,/^}$/d" $loc
done < deletionfile.txt …
Run Code Online (Sandbox Code Playgroud)

shell awk sed data-manipulation

-1
推荐指数
1
解决办法
138
查看次数

在 JSON 字符串中查找值

我有一个存储到文本文件(或变量)的字符串,看起来像这样,我只需要将“ItemsQueued”中的值存储在另一个变量中。请注意,所有项目在此字符串中出现两次,我需要这两个项目值。

[{"Description":"blablabla","RemoteServerID":"982734298437234","DisplayClass":101,"ActiveWorkers":0,"TotalWorkers":1,"State":13,"ItemsQueued":0,"BytesQueued":0,"LastWorkerSubmitTime":1592553946,"CurrentTime":1592554151,"ItemsReplicated":456,"BytesReplicated":188588980},{"Description":"blablabla","RemoteServerID":"982734298437234","DisplayClass":100,"ActiveWorkers":0,"TotalWorkers":6,"State":13,"ItemsQueued":0,"BytesQueued":0,"LastWorkerSubmitTime":1592553615,"CurrentTime":1592554151,"ItemsReplicated":403459,"BytesReplicated":1061944812437}]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我不是开发人员,sed我发现的所有示例都不适合我的用例。

bash json sed jq

-1
推荐指数
1
解决办法
55
查看次数

使用 awk 剪切特定部分

我正在处理许多包含路径示例的行:

posterita/posterita/web/jsp/pos/posReport1.jsp
build/web/view.jsp
uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/selectUserAction.jsp
config/auth.php
database/seeds/DatabaseSeeder.php
admin/modules/announcement/functions.inc.php
Run Code Online (Sandbox Code Playgroud)

我需要做什么使用 bash 打印第一个目录我希望输出像

posterita
build
uPortal-webapp
config
database
admin
Run Code Online (Sandbox Code Playgroud)

与第二和第三目录相同的方法

posterita
web
src
seeds
modules
Run Code Online (Sandbox Code Playgroud)

我如何使用 awk、sed 或 cut 来执行此操作?

bash awk cut sed

-1
推荐指数
1
解决办法
61
查看次数

标签 统计

sed ×10

bash ×7

awk ×3

capitalization ×1

cut ×1

data-manipulation ×1

jq ×1

json ×1

linux ×1

regex ×1

shell ×1

uppercase ×1