标签: sed

如何使用 Python/AWK/SED 为 Markdown 文档制作目录?

我有以下降价文档:

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 执行此操作?

python markdown awk sed table-of-contents

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

使用 sed 删除字符串中的第一个已知字符

如何使用 sed 删除字符串中的第一个已知字符?

例如,假设我想删除字符串“@ABCDEFG1234”中的第一个字符(即@)

我想 sed 验证“@”是否作为第一个字符存在。如果是这样,它应该删除该字符。

sed

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

递归地从所有文件中查找和删除行

我已经设法通过使用 grep 关键字的出现

grep "KeyWord" . -r -n -i -I 
Run Code Online (Sandbox Code Playgroud)

但是,KeyWord 出现的次数太多了。我只想删除包含该词的所有行。

我四处搜索, sed 看起来像是实用程序。谁能告诉我什么命令可以解决问题?

谢谢。

grep sed

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

使用 sed 在 Apache 配置中启用 .htaccess 文件

我正在尝试使用 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 NoneAllowOverride 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)

linux apache-http-server bash sed ubuntu

15
推荐指数
1
解决办法
4084
查看次数

正确转义 bash 脚本中的正斜杠以与 sed 一起使用

我试图通过在干模式下运行 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)

linux bash rsync sed bash-scripting

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

执行“echo $x | sed ...”和“echo $x | grep ...”的更好方法

我经常在脚本中找到这个(而且,我不得不承认,我自己写的):

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”来包含一些正则表达式的东西。

我觉得应该有——而且很可能——一种更好的表达方式,一种不涉及两个命令和一个管道,而是将事物包装成一些更紧凑的表达方式。

我就是找不到。有人吗?

shell grep sed

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

如何用sed递归替换字符?

是否可以在不再次迭代相同序列的情况下递归替换出现的字符序列?

通过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 实现预期的行为?

linux bash regex sed

14
推荐指数
3
解决办法
2428
查看次数

添加到 Notepad++ 中的每一行末尾

我有一个长文本文件

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)

shell notepad++ awk sed append

13
推荐指数
4
解决办法
3204
查看次数

Cygwin bash sed 锁定我的文件

当我使用 sed 命令更改 cygwin bash 中的文件时,文件被锁定。

复制:

  1. 打开cmdcd转到非用户目录(fe temp)
  2. echo aaa > test.txt
  3. 在文本编辑器中打开,添加行,尝试保存 => 有效
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
  5. 在文本编辑器中,添加另一行并尝试保存 =>“拒绝访问”

跆拳道?!如何在不锁定的情况下 sed 文件,或之后释放文件句柄?

  • Windows 安全权限似乎完全被写入文件:

    之前的权限:

    之前的权限(图片!)

    之后的权限:

    之后的权限(图片!)

  • 但是它在用户目录 ( Desktop) 中有效

  • 我用 LockHunter 检查了文件,但似乎没有进程锁定文件
  • Cygwin FAQ提到了对某些程序的干扰。它尝试卸载 Antivir 和 Catalyst 并重新启动。
  • 尝试UnxTools(崩溃)、GnuWin32(sed 不支持就地替换)、Interex(安装程序不支持 W7 Pro)...... * 叹气 *

windows cygwin bash sed

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

sed 怪异,无与伦比的 {

我正在尝试使用 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。

sed command-line

11
推荐指数
2
解决办法
6659
查看次数