我有以下降价文档:
Heading-a
==========
---text---
Heading-b
------------
--- text ---
Heading-c
----------
--- text---
Heading-d
=======
--- text----
Heading-e
---
...
Run Code Online (Sandbox Code Playgroud)
我想用它制作一个可点击的目录,类似于LaTex的方式,但找不到可以做到这一点的工具,这表明我们应该构建一个。
该工具应收集“H1”标题和“H2”标题,以便将数字 1 分配给Heading-a数字 1.1。到Heading-b1.2。到Heading-c, 2. 到Heading-d, 2.1. 对Heading-e等,这样,我们应该得到的内容如下表:
1. Heading-a
1.1. Heading-b
1.2. Heading-c
2. Heading-d
2.1. Heading-e
Run Code Online (Sandbox Code Playgroud)
如何使用 Python/AWK/SED 执行此操作?
如何使用 sed 删除字符串中的第一个已知字符?
例如,假设我想删除字符串“@ABCDEFG1234”中的第一个字符(即@)
我想 sed 验证“@”是否作为第一个字符存在。如果是这样,它应该删除该字符。
我已经设法通过使用 grep 关键字的出现
grep "KeyWord" . -r -n -i -I
Run Code Online (Sandbox Code Playgroud)
但是,KeyWord 出现的次数太多了。我只想删除包含该词的所有行。
我四处搜索, sed 看起来像是实用程序。谁能告诉我什么命令可以解决问题?
谢谢。
我正在尝试使用 Bash 脚本自动配置 Ubuntu Vagrant 框。一切都很好,但我在配置 Apache 以允许覆盖.htaccess文件时遇到了困难。在我的配置文件中,有以下块:
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
我需要做的就是替换AllowOverride None为AllowOverride all. 这似乎是 的任务sed,但<Directory>在此配置文件中还有其他块我不想允许覆盖。
当特定字符串出现在两个其他特定字符串之间时,如何使用 sed 将特定字符串替换为新字符串?
换句话说,AllowOverride None只有当它出现在<Directory /var/www/>和之间时,我该如何替换</Directory>?
我可以使用以下命令来获取我感兴趣的块:
sed -n '/<Directory \/var\/www\/>/,/<\/Directory>/p' 000-default
Run Code Online (Sandbox Code Playgroud) 我试图通过在干模式下运行 rsync 来确定在同步两个文件夹时新复制的文件的大小,然后总结 rsync 输出中列出的文件的大小。
目前我被困在文件的父文件夹前缀上。我发现了如何使用 sed 为行添加前缀以及如何使用 sed 进行转义,但是我在将这两者结合起来时遇到了麻烦。
这是我走了多远:
source="/my/source/folder/"
target="/my/target/folder/"
escaped=`echo "$source" | sed -e 's/[\/&]/\\//g'`
du `rsync -ahnv $source $target | tail -n +2 | head -n -3 | sed "s/^/$escaped/"` | awk '{i+=$1} END {print i}'
Run Code Online (Sandbox Code Playgroud)
这是我从 bash -x myscript.sh 得到的输出
+ source=/my/source/folder/
+ target=/my/target/folder
++ echo /my/source/folder/
++ sed -e 's/[\/&]/\//g'
+ escaped=/my/source/folder/
+ awk '{i+=$1} END {print i}'
++ rsync -ahnv /my/source/folder/ /my/target/folder/
++ sed 's/^//my/source/folder//'
++ head -n -3
++ tail -n …Run Code Online (Sandbox Code Playgroud) 我经常在脚本中找到这个(而且,我不得不承认,我自己写的):
a=$(echo "$x" | sed "s/foo/bar/")
Run Code Online (Sandbox Code Playgroud)
或者
if echo "$x" | grep -q foo
then
...
fi
Run Code Online (Sandbox Code Playgroud)
考虑“foo”来包含一些正则表达式的东西。
我觉得应该有——而且很可能是——一种更好的表达方式,一种不涉及两个命令和一个管道,而是将事物包装成一些更紧凑的表达方式。
我就是找不到。有人吗?
是否可以在不再次迭代相同序列的情况下递归替换出现的字符序列?
通过sed在以下场景中执行 a ,我可以获得提到的输出。
$ echo XX | sed -e 's/XX/XoX/g'
XoX
$ echo XXX | sed -e 's/XX/XoX/g'
XoXX
$ echo XXXX | sed -e 's/XX/XoX/g'
XoXXoX
Run Code Online (Sandbox Code Playgroud)
但是,我希望输出遵循以下行为。
输入:
XX
XXX
XXXX
Run Code Online (Sandbox Code Playgroud)
预期输出:
XoX
XoXoX
XoXoXoX
Run Code Online (Sandbox Code Playgroud)
是否可以单独使用 sed 实现预期的行为?
我有一个长文本文件
gallery-dl -g -i w4b027.txt >
gallery-dl -g -i a4b028.txt >
gallery-dl -g -i b4b029.txt >
gallery-dl -g -i c4b030.txt >
gallery-dl -g -i d4b031.txt >
gallery-dl -g -i w4b032.txt >
gallery-dl -g -i w4b033.txt >
gallery-dl -g -i w4b034.txt >
gallery-dl -g -i w4b035.txt >
gallery-dl -g -i w4b036.txt >
gallery-dl -g -i w4b037.txt >
gallery-dl -g -i w4b038.txt >
gallery-dl -g -i w4b039.txt >
gallery-dl -g -i w4b040.txt >
Run Code Online (Sandbox Code Playgroud)
我想成功
gallery-dl -g -i a4b027.txt > a4b027x.txt
gallery-dl -g …Run Code Online (Sandbox Code Playgroud) 当我使用 sed 命令更改 cygwin bash 中的文件时,文件被锁定。
复制:
cmd并cd转到非用户目录(fe temp)echo aaa > test.txt%CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt”跆拳道?!如何在不锁定的情况下 sed 文件,或之后释放文件句柄?
Windows 安全权限似乎完全被写入文件:
之前的权限:
之后的权限:
但是它在用户目录 ( Desktop) 中有效
我正在尝试使用 r (read 命令将 data2 的内容附加到数据。我想在包含“two”的行之后附加内容。我想删除包含“two”的行。
但我撞到了一堵砖墙。感觉就像一个错误,但也许这只是我自己的愚蠢。
好的,这个命令有效。
% sed -r '/two/ r /tmp/data2' < /tmp/data
one
two
five
six
seven
three
four
Run Code Online (Sandbox Code Playgroud)
Sed 似乎对空间有点挑剔......原因不明显,但我会接受它。
% sed -r '/two/ r /tmp/data2 ' < /tmp/data
one
two
three
four
Run Code Online (Sandbox Code Playgroud)
我的目标是在读取命令后运行 (d) 删除以删除原始行。这是我所得到的。
% sed -r '/two/{ r /tmp/data2}' < /tmp/data
sed: -e expression #1, char 0: unmatched `{'
Run Code Online (Sandbox Code Playgroud)
我很确定 '{' 正在匹配,它不是世界上最长的命令。
我真正想跑的...
% sed -r '/two/{ r /tmp/data2; d }' < /tmp/data
Run Code Online (Sandbox Code Playgroud)
系统是 Ubuntu 12. GNU SED。