我已经导出了非常大的 10 年电子邮件存档。
我想解析任何长度为 64 个字符的字符串的所有文本以搜索比特币私钥。
如何解析特定长度的字符串?
我试图在匹配模式之后提取第 N 行中的值'kappa (ts/tv) ='。我使用 awk 使用了以下命令。
awk '/kappa (ts/tv) =/{print $NF}' text.txt
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误
awk: cmd. line:1: error: Unmatched ( or \(: /kappa (ts/
Run Code Online (Sandbox Code Playgroud)
我也用'sed'得到这个错误。我知道我在这里遗漏了一些关于正则表达式的内容。
任何人都可以提供任何建议吗?
我有一个像下面这样的文件
<g> Good wheatear </g> other parts of line
<g> The farm land is to be sold </g> other parts of line
<g> knock knock </g> other parts of line
Run Code Online (Sandbox Code Playgroud)
我希望我的输出是这样的:
<g> Good wheatear </g>
<g> The farm land is to be sold </g>
<g> knock knock </g>
Run Code Online (Sandbox Code Playgroud)
即打印 <g> 和 </g> 标签之间的内容,包括标签
我试过这个命令:
awk '/<s>/, /<\/s>/' trsTest.txt
但它打印了整行。
如何打印标签之间的内容?
我有一段代码,用于查找字符串,然后记录是否匹配。当字符串不超过 50 个字符时,代码工作正常。然而,在此之上,例如对于 100 或 150 个字符的字符串,它仅基于字符串中的前 50 个字符而不是完整的 100/150 个字符进行匹配。
有没有办法确保它根据完整的字符串长度计算匹配项?我正在使用一个awk程序,因为当前的分数基于出生日期并且小于一列,然后是长字符串匹配。
want2=$( awk '{print $4}' temp10_0.txt | head -1 )
dob_want2=$(head -1 year.txt )
awk -v a="$want2" -v b="$dob_want2" '{ if ($1==a && $2<=b) print $0, "1";else print $0, "0"}' temp25_0.txt> temp11_0.txt
Run Code Online (Sandbox Code Playgroud)
temp25_0.txt如下
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2016
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2008
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2013
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2000
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 1987
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 1965
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555150000555555515515551011155111555115155101155511 2000
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555000551511115555555155155511111551115551151551111555 2007
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111150500 2016
Run Code Online (Sandbox Code Playgroud)
want2 是
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511
Run Code Online (Sandbox Code Playgroud)
dob_want2 是
2019
Run Code Online (Sandbox Code Playgroud)
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2016 1
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 2008 1
51511151511115551515555551111111555115511511111511115151111555151555511115511551511555551555155555555151111555555515515551111155111555115155111155511 …Run Code Online (Sandbox Code Playgroud)我需要将一个文件(24 行)grep 成两个文件(有点大)。
原始文件包含与此字符串类似的 24 行:
AATGGACGCTTAAC[A|C|T][A|C|G]CGGC[A|T]TCGGAT
Run Code Online (Sandbox Code Playgroud)
我执行以下操作:
grep -f aList hugeFile_N*.csv | wc -l
4396868
Run Code Online (Sandbox Code Playgroud)
然后,为了仔细检查一切是否正常,我将文件分成两个文件,并通过另一个 grep 使用它们:
cat aList | head -n 12 > firstHalf
cat aList | tail -n +13 > secondHalf
grep -f firstHalf hugeFile_N*.csv | wc -l
2169008
grep -f secondHalf hugeFile_N*.csv | wc -l
2228046
Run Code Online (Sandbox Code Playgroud)
现在,我期望来自两个单独 grepped 文件的匹配总数等于我为原始文件找到的匹配数。但是,正如你所看到的:
2169008 + 2228046 = 4397054
4397054 != 4396868
Run Code Online (Sandbox Code Playgroud)
不是这种情况。我们有 186 场比赛缺失。这里发生了什么?
我还对(实际上非常简单的)文件进行了一些调查。在这里,我从两个独立的部分 grep 结果:
grep -f <(cat firstHalf secondHalf) hugeFile_N*.csv > together
Run Code Online (Sandbox Code Playgroud)
然后我分别 grep 两半:
grep …Run Code Online (Sandbox Code Playgroud) Bash 有=~正则表达式匹配操作符。下面是一个使用它的例子:
#!/bin/bash
input=$1
if [[ "$input" =~ "[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]]
# ^ NOTE: Quoting not necessary, as of version 3.2 of Bash.
# NNN-NN-NNNN (where each N is a digit).
then
echo "Social Security number."
# Process SSN.
else
echo "Not a Social Security number!"
# Or, ask for corrected input.
fi
Run Code Online (Sandbox Code Playgroud)
对于否定,我见过的所有例子都依赖于一个else子句。对于我只对否定匹配感兴趣的情况,有没有更好的方法来制作非功能性if子句?
例如,如果我只关心上述输入不是非社会安全号码的情况,那么正确的方法是什么?
我想在case语句中匹配一个版本号。版本号可能如下所示
1.12.0.32
1.12.0.32.1
2.10.0.30.1.2
Run Code Online (Sandbox Code Playgroud)
并存储在一个 shell 变量中:version.
正如我在互联网上搜索的那样,在 -case语句中匹配正则表达式并不困难。但是,有没有人有想法或可以帮助说明如何在case-statement 中完成?
我尝试了以下方法,但没有奏效:
1.12.0.32
1.12.0.32.1
2.10.0.30.1.2
Run Code Online (Sandbox Code Playgroud) 我需要询问您有关grep在 Debian 中的 Bash 脚本中使用命令的问题。
我有包含以下几行的示例文件:
/fruit-/apple.txt
/fruit-/banana.txt
/fruit-/samples
/vegetables-/carrot.txt
/vegetables-/garlic.txt
Run Code Online (Sandbox Code Playgroud)
我想选择包含 word 的所有行fruit-。
我可以调用命令:
grep -w "fruit-" file.txt
Run Code Online (Sandbox Code Playgroud)
输出将是:
/fruit-/apple.txt
/fruit-/banana.txt
/fruit-/samples
Run Code Online (Sandbox Code Playgroud)
但是当我使用命令时:
grep -w "fruit" file.txt
Run Code Online (Sandbox Code Playgroud)
我也得到与上面相同的输出。但这是错误的。输出应该是 0。因为我没有输入-模式。
为什么不正确grep对待-呢?
我有一个数据文件,日期在第二列
# cat datafile
-;20210106;-;-;-;
-;20210112;-;-;-;
-;20210112;-;-;-;
-;20210112;-;-;-;
...
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210219;-;-;-;
-;20210219;-;-;-;
-;20210221;-;-;*20210219*;
Run Code Online (Sandbox Code Playgroud)
连字符“ -”代表随机文本数据,点“ ”...代表更多行数据,“*”代表同一列中的随机文本。我想要的只是基于第二列之间的20210112数据20210219。
我想避免,sed/grep因为两者也会在其他列中 grep 类似的模式。
# sed -n '/20210112/,/20210219/p' datafile
-;20210112;-;-;-;
-;20210112;-;-;-;
-;20210112;-;-;-;
...
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210219;-;-;-;
-;20210219;-;-;-;
-;20210221;-;-;*20210219*;
Run Code Online (Sandbox Code Playgroud)
它也会匹配其他不相关行中的一些其他文本。所以,我猜 AWK 是一个更好的候选者,但我注意到 awk 仅在第一个模式的第一个匹配到第二个模式的第一个匹配之间打印
# awk -F';' '$2 ~ /20210112/,$2 ~ /20210219/' datafile
-;20210112;-;-;-;
-;20210112;-;-;-;
-;20210112;-;-;-;
...
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210219;-;-;-;
Run Code Online (Sandbox Code Playgroud)
然而,我想将所有行带到第二个模式的最后一场比赛。
-;20210112;-;-;-;
-;20210112;-;-;-;
-;20210112;-;-;-;
...
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-; …Run Code Online (Sandbox Code Playgroud) 我需要在 Bash 中创建一个程序来启动一个命令,检查结果是否包含一个单词,如果包含,则执行一些操作。
示例:我需要检查打印机是否在线
lpstat -p [printer name]
Run Code Online (Sandbox Code Playgroud)
如果结果包含这个词inactive,脚本应该给我发一封邮件。
如何检查程序输出的单词?
pattern-matching ×10
awk ×4
bash ×3
grep ×3
case ×1
files ×1
linux ×1
sed ×1
shell-script ×1
wildcards ×1