标签: pattern-matching

从文件中提取对应于第 n:th 模式的子序列

我有以下数据块(多个)

chr1.trna4 (17188416-17188486)  Length: 71 bp
Type: Gly   Anticodon: CCC at 33-35 (17188448-17188450) Score: 78.3
HMM Sc=56.60    Sec struct Sc=21.70
         *    |    *    |    *    |    *    |    *    |    *    |    *    |
Seq: GCATTGGTGGTTCAGTGGTAGAATTCTCGCCTCCCACGCGGGAGaCCCGGGTTCAATTCCCGGCCAATGCA
Str: >>>>>>>..>>>>.......<<<<.>>>>>.......<<<<<....>>>>>.......<<<<<<<<<<<<.
Run Code Online (Sandbox Code Playgroud)

对于每个块,我需要在块的最后一行找到以Str. 在上述情况下,第 8 个模式是.......(7 个周期)。这是因为第一组>符号构成一个模式,第二组周期构成第二个模式,依此类推。

现在我需要从Seq模式行正上方的行中提取这 7 个字符。在示例中,这对应于子序列CTCCCAC

输出应该是 Seq is CTCCCAC and Anticodon: CCC

这在bash或任何外壳中都可能吗?

数据块的更多示例

chr19.trna11 (4724719-4724647)  Length: 73 bp
Type: Val   Anticodon: CAC at 34-36 (4724686-4724684)   Score: …
Run Code Online (Sandbox Code Playgroud)

sed awk shell-script bioinformatics pattern-matching

7
推荐指数
2
解决办法
819
查看次数

从全局匹配中排除模式

我的目录如下所示:

$ ls
total 0
-rw-r--r-- 1 user user 0 Jun 18 22:44 file0
-rw-r--r-- 1 user user 0 Jun 18 22:44 file1
-rw-r--r-- 1 user user 0 Jun 18 22:44 file2
-rw-r--r-- 1 user user 0 Jun 18 22:44 file3
-rw-r--r-- 1 user user 0 Jun 18 22:44 file4
-rw-r--r-- 1 user user 0 Jun 18 22:44 file5
-rw-r--r-- 1 user user 0 Jun 18 22:44 file6
-rw-r--r-- 1 user user 0 Jun 18 22:44 file7
-rw-r--r-- 1 user …
Run Code Online (Sandbox Code Playgroud)

bash wildcards pattern-matching

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

如何确保一个字符串至少包含一个大写字母、一个小写字母、一个数字和一个标点符号?

这就是我现在用来完成工作的方法:

#!/bin/sh --

string='Aa1!z'

if ! printf '%s\n' "$string" | LC_ALL=C grep -q '[[:upper:]]' || \
   ! printf '%s\n' "$string" | LC_ALL=C grep -q '[[:lower:]]' || \
   ! printf '%s\n' "$string" | LC_ALL=C grep -q '[[:digit:]]' || \
   ! printf '%s\n' "$string" | LC_ALL=C grep -q '[[:punct:]]'; then
  printf '%s\n' 'String does not meet your requirements'
else
  printf '%s\n' 'String meets your requirements'
fi
Run Code Online (Sandbox Code Playgroud)

这是非常低效和冗长的。有一个更好的方法吗?

shell posix pattern-matching

5
推荐指数
2
解决办法
3631
查看次数

ack :获取第 10 个(或更大的第 n 个)匹配/捕获组

我想我可能刚刚搜索错了,但我没有找到任何答案。如果有重复,请告诉我,我可以将其删除。

问题背景

我正在使用ack链接),它在引擎盖下有 Perl 5,来获取 n-gram - 特别是高阶 n-gram。我可以使用我知道的语法(基本上最多$9)获得最多 9 克,但我无法获得 10 克。使用$10只是给了我$1一个0之后。之类的东西$(10),并${10}没有解决问题。我对使用语言建模工具包的解决方案感兴趣,我想使用ack.

我使用的一个数据集是马克吐温的全集

( wget http://www.gutenberg.org/cache/epub/3200/pg3200.txt && mv pg3200.txt TWAIN_Mark_complete_orig.txt).

我已经解析干净了(请参阅文章末尾的解析注释)并将解析结果保存为TWAIN_Mark_complete_parsed.txt.

我从 2 克中得到了很好的结果,代码和部分结果是

time cat TWAIN_Mark_complete_parsed.txt | \
    ack '(\S+) +(?=(\S+) +)' \
    --output '$1 $2' | \
    sort | uniq -c | \
    sort -rn > Twain_2grams.txt
## `time` info not shown …
Run Code Online (Sandbox Code Playgroud)

perl ack pattern-matching

5
推荐指数
0
解决办法
90
查看次数

如何将包含未闭合引号的文字字符串与 ripgrep 匹配?

我有一个包含一些 python 代码的文件。有一行包含以下内容(包括引号)

'hello "value"'

我想'hello "value"在文件中搜索。注意未封闭的报价。我正在使用带有以下命令的 ripgrep:

rg -F 'hello "value"

上述命令不适用于'hello "value"bash/zsh 中的输入。我想要的只是文字匹配。我已经使用了该标志,F但由于输入字符串中没有关闭引号,它根本不起作用。我还尝试将输入括在单/双引号内,如下所示:

rg -F "'hello "value"" 或者 rg -F ''hello "value"'

上面的方法也行不通。

为什么即使使用F告诉 ripgrep 按原样考虑输入的标志,使用 ripgrep 字面搜索字符串也如此神秘?我如何解决它?

quoting pattern-matching ripgrep

5
推荐指数
2
解决办法
514
查看次数

使用 less / search 命令时使用锚 ^ 模式

在浏览 Linux 手册页时,有时您需要查询手册页中诸如-p或 之类的标志的含义。-al

手册页的默认文本阅读器较少,我尝试使用 / 搜索来查找公共标志列表定义中的第一个匹配项:

/^-p
Run Code Online (Sandbox Code Playgroud)

Pattern not found发生了却不起作用。

这个技巧在 vim 中工作时有效,但在阅读手册页时不适用于 less。

有没有办法实现这个要求呢?

less man search pattern-matching

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

如何自动将文本放入文本中?

我需要将一个文本放入另一个文本中。

1)我有一个包含输入值列表的文件:

A1
B2
C3
D4
E5
Run Code Online (Sandbox Code Playgroud)
  1. 我有一个包装模式,其中应包含文本:
A1
B2
C3
D4
E5
Run Code Online (Sandbox Code Playgroud)

对于每个输入值,应该创建一个带有输入的包装器,因此最终结果应该是一个包含以下内容的文件:

$wgSpecialPageLockdown['INPUT_COMES_HERE'] = array('sysop');
Run Code Online (Sandbox Code Playgroud)

我也愿意在 GUI 中做到这一点,例如 Visual Studio Code。

您希望如何执行这样的操作?
顺便问一下,这种文本操作通常是如何命名的?

text-processing pattern-matching visual-studio-code

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

计算最长的连续模式

我有一个序列文件:

$猫文件
CACCGTTGCCAAACAATG
TTAGAAGCCTGTCAGCCT
CATTGCTCTCAGACCCAC
GATGTACGTCACATTAGA
ACACGGAATCTGCTTTTT
CAGAATTCCCAAAGATGG

我想计算 C+T 的最长延伸。我只能计算总 C+T,但我想要最长的伸展。

$ cat 文件 | awk '{ 打印 $0, gsub(/[cCtT]/,"",$1)}'
CACCGTTGCCAAACAATG 9
TTAGAAGCCTGTCAGCCT 10
CATTGCTCTCAGACCCAC 12
GATGTACGTCACATTAGA 8
ACACGGAATCTGCTTTTT 11
CAGAATTCCCAAAGATGG 7

预期的结果将显示出最长的C ^ + T舒展。

CACCGTTGCCAAACAATG 9 2
TTAGAAGCCTGTCAGCCT 10 3
CATTGCTCTCAGACCCAC 12 5
GATGTACGTCACATTAGA 8 2
ACACGGAATCTGCTTTTT 11 6
CAGAATTCCCAAAGATGG 7 5

awk pattern-matching

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

使用 sed 打印范围内的选定行

考虑简化文件

AAA
BBB
CCC1
DDD
EEE
CCC2
DDD
FFF
GGG
CCC3
HHH
Run Code Online (Sandbox Code Playgroud)

我可以挑选出的范围内EEE,以FFF

sed -n '/EEE/,/FFF/p'
Run Code Online (Sandbox Code Playgroud)

假设我想打印任何包含C但仅在匹配范围内的行。我可以sed通过管道传输结果grep

sed -n '/EEE/,/FFF/p' | grep 'C'
Run Code Online (Sandbox Code Playgroud)

我也可以做一个小范围和匹配awk脚本(或perlpython等等)。但是我将如何仅使用一次调用来做到这一点sed

sed pattern-matching

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

运算符的 awk 正则表达式

我想用我的 awk 正则表达式计算和总结文件中的匹配数。

该文件file包含:

Gra pes
gra ndma
straw berry
blue Berry
banana
peanut
school
Run Code Online (Sandbox Code Playgroud)

我需要为模式匹配制作一个正则表达式,但我不确定如何在正则表达式中实现AND/OR,尽管它们具有相同的优先级。

我试过了:

awk 'tolower($1) ~ /(gra|straw) (pes|berry)|banana|peanut/ {sum+=1} END {print sum+0}' file
Run Code Online (Sandbox Code Playgroud)

所以它应该是两者之一(gra pes, gra berry, straw pes, straw berry) OR banana, peanut并返回 4,因为有 4 个匹配项。

我假设我的语法错误与OR香蕉|花生,但我不知道如何修复它。

关于出了什么问题的任何想法?谢谢你

awk pattern-matching

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