小编poi*_*000的帖子

使用sed查找两个模式之间的线条

我在text.txt中有如下行:

blah blah..
blah abc blah..
blah abc blah
blah blah..
blah blah..
blah blah..
blah efg blah blah
blah blah..
blah abc blah
blah abc blah
blah abc blah
blah abc blah
blah abc blah
blah blah..
blah efg blah blah
blah blah..
blah blah..
Run Code Online (Sandbox Code Playgroud)

我想在"efg"和"efg"之前输出每次最后出现的"abc"之间的行,对于上面的例子,我想输出:

blah abc blah
blah blah..
blah blah..
blah blah..
blah efg blah blah
blah abc blah
blah blah..
blah efg blah blah
Run Code Online (Sandbox Code Playgroud)

我知道sed可以使用两种模式选择范围,例如:

sed -n '/abc/,/efg/p' test.txt
Run Code Online (Sandbox Code Playgroud)

但是输出将从第一次出现的"abc"而不是最后一次开始,输出如下:

blah abc blah..
blah abc …
Run Code Online (Sandbox Code Playgroud)

sed

7
推荐指数
1
解决办法
4189
查看次数

如何在Powershell中等待并终止超时进程

在Windows 7桌面中使用Powershell 2.0

我想创建一个运行ant命令的进程,然后等待该进程在几分钟内完成.如果超时并且进程仍在运行,那么我想杀死它.

我写了一些代码如下:

$p = Start-Process "cmd.exe" '/c ant execute' -PassThru -RedirectStandardOutput $log_file_path
Wait-Process -id $p.ID -timeout 100
if(!$p.hasExited) {
    echo "kill the process"
    $p.Kill()
    #Stop-Process $p.ID
}

Start-Sleep -s 30

# continue to do other things
Run Code Online (Sandbox Code Playgroud)

尽管该过程没有被杀死,但即使在Start-Sleep语句执行后它仍然在运行.

我也尝试使用Stop-Process命令,因为注释掉的行表明,没有运气,该过程仍在运行.

我可能错过了一些重要的事情,请提供一些线索.

编辑:

事实证明,有一些子进程仍然在cmd窗口中运行,只杀死cmd进程是不够的.

我终于通过以下代码完成了工作:

if(!$p.hasExited) {
    echo "kill the process"
    taskkill /T /F /PID $p.ID
    #$p.Kill()
    #Stop-Process $p.ID
}
Run Code Online (Sandbox Code Playgroud)

windows powershell

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

在bash脚本中使用带有长模式列表的egrep

我想搜索数百个xml文件中是否存在一些关键词,我想使用以下脚本来处理这个问题:

#!/usr/local/bin/bash

find . -name '*.xml' |xargs egrep -n "HERE IS LONG LIST(word1|word2|...)" > result
Run Code Online (Sandbox Code Playgroud)

我得到错误消息为:

xargs: a single arg was greater than the max arglist size of 2048 characters
Run Code Online (Sandbox Code Playgroud)

所以我将长名单改为3个部分,它变为:

#!/usr/local/bin/bash

find . -name '*.xml' |xargs egrep -n "LIST_1" > result
find . -name '*.xml' |xargs egrep -n "LIST_2" >> result
find . -name '*.xml' |xargs egrep -n "LIST_3" >> result
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个以避免模式列表分离的事情?

bash grep

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

为什么声明shell脚本变量没有先前的`$`?

我注意到在shell脚本中,当我们声明一个变量时,不需要前面的美元符号,但是当我们想要稍后访问这个变量时,我们应该在这个变量名前添加一个美元符号.

就像:

#!/bin/sh
VAR_1=Hello
VAR_2=Unix

echo "$VAR_1 $VAR_2"
Run Code Online (Sandbox Code Playgroud)

这与其他语言不同,比如Perl我们总是会有前面带有变量名的美元符号,我只是想知道shell脚本以这种方式做的任何好理由,或者它只是一个约定......?

shell

0
推荐指数
1
解决办法
251
查看次数

摩尔斯电码算法

莫尔斯电码是最便宜和最流行的消息通信方式。在摩尔斯电码中,字母表中的每个字母都由一系列点和破折号表示。传统上,点由一个短音符传输,破折号由一个较长的音符传输,不同字母之间有停顿。英文字母的每个字母的摩尔斯电码表示如下

a .-
b -...
c -.-.
d -..
e .
f ..-.
g --.
h ....
i ..
j .---
k -.-
l .-..
m --
n -.
o ---
p .--.
q --.-
r .-.
s ...
t -
u ..-
v ...-
w .--
x -..-
y -.--
z --..
Run Code Online (Sandbox Code Playgroud)

例如,让消息是-..-----.并且它由三个字母组成,它可能表示 njg、dog、xmg 或 xon。

我想知道算法。据我所知,我们可以让 HashMap 将键作为点或线,并将值作为字母。但是现在我无法考虑如何检查形成的每个不同的单词。也许递归或动态编程可以做到这一点,但请给我算法,以便我可以开始编码。

algorithm morse-code

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

标签 统计

algorithm ×1

bash ×1

grep ×1

morse-code ×1

powershell ×1

sed ×1

shell ×1

windows ×1