标签: sed

如何用文件夹路径sed和替换字符串

我正在尝试编写以下 bash 脚本:

HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;
Run Code Online (Sandbox Code Playgroud)

我想在文件中更改的行是这样的:

users                   = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"
Run Code Online (Sandbox Code Playgroud)

所以最终的结果一定是:

users                   = "/opt/my_home/config/data/_DOMAIN_/users.conf"
Run Code Online (Sandbox Code Playgroud)

但我不明白......我想这是因为转义字符......

任何人都可以透露一些信息吗?

谢谢

command-line scripts sed

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

15
推荐指数
6
解决办法
7万
查看次数

两个大文件的区别

我有“test1.csv”,它包含

200,400,600,800
100,300,500,700
50,25,125,310
Run Code Online (Sandbox Code Playgroud)

和 test2.csv ,它包含

100,4,2,1,7
200,400,600,800
21,22,23,24,25
50,25,125,310
50,25,700,5
Run Code Online (Sandbox Code Playgroud)

现在

diff test2.csv test1.csv > result.csv
Run Code Online (Sandbox Code Playgroud)

不同于

diff test1.csv test2.csv > result.csv
Run Code Online (Sandbox Code Playgroud)

我不知道哪个是正确的顺序,但我想要别的东西,上面的两个命令都会输出类似的东西

2 > 100,4,2,1,7
   3 2,3c3,5
   4 < 100,300,500,700
   5 < 50,25,125,310
   6 \ No newline at end of file
   7 ---
   8 > 21,22,23,24,25
   9 > 50,25,125,310
Run Code Online (Sandbox Code Playgroud)

我只想输出差异,因此 results.csv 应该是这样的

100,300,500,700
100,4,2,1,7
21,22,23,24,25
50,25,700,5
Run Code Online (Sandbox Code Playgroud)

我试过了diff -qdiff -s但他们没有成功。顺序无关紧要,重要的是我只想看到差异,没有 > 也没有 < 也没有空格。

grep -FvF 在较小的文件上而不是在大文件上做了技巧

第一个文件包含超过 500 万行,第二个文件包含 1300。

所以 results.csv 应该导致 …

grep diff sed awk

15
推荐指数
2
解决办法
6865
查看次数

使用sed命令解析json文本的正则表达式

我有这个json文本:

{
    "buildStatus" : {
        "status" : "ERROR",
        "conditions" : [{
                "status" : "OK",
                "metricKey" : "bugs"
            }, {
                "status" : "ERROR",
                "metricKey" : "test_success_density"
            }, {
                "status" : "OK",
                "metricKey" : "vulnerabilities"
            }
        ],
        "periods" : []
    }
}
Run Code Online (Sandbox Code Playgroud)

我想提取buildStatus的整体状态,即预期的输出是“ERROR”

"buildStatus" : {
    "status" : "ERROR",
    ....
}
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的 sed 表达式,但它不起作用,它返回OK

status= sed -E 's/.*\"buildStatus\":.*\"status\":\"([^\"]*)\",.*/\1/' jsonfile
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

command-line regex sed text-processing

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

如何在 Virtual Box 中运行没有 GUI 的 Ubuntu?

我有一台 Windows XP 笔记本电脑,我在其中运行 VirtualBox 和最新的 Ubuntu,我的硬件有点旧,所以在 Virtual box 中运行最新版本的 Ubuntu 有点麻烦,性能非常慢,即使我正在做的一切正在运行终端并练习 Linux 命令!

我在 VirtualBox 上尝试了 DSL(该死的小型 Linux),非常小的发行版(50 MB),我对系统现在的速度感到满意,但我想念 Ubuntu,此外,DSL 缺少太多命令,例如 sed 和许多其他我不记得了。

是否可以仅在控制台模式下运行 Ubuntu,没有 GUI 或最小 GUI...没有漂亮的效果没有漂亮的图形?链接/教程将不胜感激。

performance command-line virtualbox sed distro-recommendation

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

删除文件中的第一行哪个更快... sed 或 tail?

在这个答案中(如何使用 sed 删除文件的第一行?)有两种方法可以删除文件中的第一条记录:

sed '1d' $file >> headerless.txt
Run Code Online (Sandbox Code Playgroud)

** - - - - - - - - 或者 - - - - - - - - **

tail -n +2 $file >> headerless.txt
Run Code Online (Sandbox Code Playgroud)

我个人认为该tail选项在外观上更令人愉悦且更具可读性,但可能是因为我受到了sed-challenged。

哪种方法最快?

scripts tail sed

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

如何用文件中的单个单词替换多行(就地替换)?

我的filename文件内容如下(例如):

My block of line starts from here 
START
First line
second line
third line
END
and end to here for example.
Run Code Online (Sandbox Code Playgroud)

我想,以取代之间的行块START,并END只用一个词,例如用SINGLEWORD。像下面这样:

My block of line starts from here 
SINGLEWORD
and end to here for example.
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令找到我的行块:

grep -Pzo "START(.|\n)*END" filename
Run Code Online (Sandbox Code Playgroud)

运行上述命令的结果将是这样的:

START
First line
second line
third line
END
Run Code Online (Sandbox Code Playgroud)

然后我使用此命令将所有行合并为一行:

LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
Run Code Online (Sandbox Code Playgroud)

然后我会得到这个结果:

START First line second line third line END
Run Code Online (Sandbox Code Playgroud)

通过我的最后一个命令, …

command-line perl sed awk text-processing

13
推荐指数
2
解决办法
3万
查看次数

为什么将 sed 输出重定向到同一个输入文件会使我的机器无响应?

我试图sed替换大文件(100 MB)中的一些关键字。我不知道-i(inplace) 选项,所以我的第一次尝试是这样重定向:

sed 's/original/edited/g' file.log >> file.log
Run Code Online (Sandbox Code Playgroud)

之后发生的事情是我的电脑停止了,几乎没有键盘输入。我尝试了不同的控制台Ctrl+ Alt+ F1,但以后慢慢输入用户名,就停止了。没有键盘,我唯一的选择是硬件重置机器。登录后,我看到file.log大约有8GB。

我真的很想了解为什么该命令的执行能够使系统如此无响应,以及系统级别是否存在触发警报并终止违规进程的机制?

command-line sed

13
推荐指数
3
解决办法
2775
查看次数

:a;$!N; 是什么意思?在 sed 命令中?

$ (echo hello; echo there) | sed ':a;$!N;s/\n/string/;ta'
hellostringthere
Run Code Online (Sandbox Code Playgroud)

上面的sed命令用字符串“string”替换换行符。但我不知道:a;$!N;s/\n/string/;ta单引号内的含义。我知道中间部分s/\n/string/。但我不知道 first ( :a;$!N;) 和 last ( ta) 部分的功能。

sed text-processing

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

如何删除以某些字符串开头的行

有没有办法删除以某些字符串开头的行。

我有这个 youtube-dl 代码

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E
Run Code Online (Sandbox Code Playgroud)

它的结果是这样的

[youtube:playlist] PL1C815DB73EC2678E: Downloading webpage
[download] Downloading playlist: Less than 1 minute
[youtube:playlist] playlist Less than 1 minute: Collected 4 video ids (downloading 4 of them)
[download] Downloading video 1 of 4
[youtube] KNLwsqzFfNg: Downloading webpage
[youtube] KNLwsqzFfNg: Extracting video information
[youtube] KNLwsqzFfNg: Downloading DASH manifest
[download] Destination: _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a

[download]   0.4% of 231.51KiB at  6.10KiB/s ETA 00:30
[download]   1.1% of …
Run Code Online (Sandbox Code Playgroud)

command-line grep sed awk youtube-dl

12
推荐指数
2
解决办法
3万
查看次数