a[bc]d和 和有a{b,c}d什么区别?为什么人们a{b,c}d在已经有的时候使用a[bc]d?
假设我有一个为终端着色的命令的输出。我想匹配包含黄色的任何行。我怎样才能在 grep 中做到这一点,例如:mycommand -itSomtimesPrintsLinesWithYellowColorCodes | grep -e "?????"
注意:这不是关于为 grep 的输出着色或添加任何颜色。这只是关于如何过滤/匹配进入 grep 的输入的颜色。
我有一个目录~/Documents/machine_learning_coursera/。
命令
find . -type d -name '^machine'
Run Code Online (Sandbox Code Playgroud)
没有找到任何东西
我也试过
find . -type d -regextype posix-extended -regex '^machine'
Run Code Online (Sandbox Code Playgroud)
以便匹配字符串的开头而没有。
我也试过-name:
find . -type d -regextype posix-extended -regex -name '^machine'
Run Code Online (Sandbox Code Playgroud)
并得到错误:
find: paths must precede expression: `^machine'
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
这个问题的答案:
不关心落在匹配模式之间的多个行序列。因此,例如,sed -n '/startpattern_here/,/endpattern_here/p'将打印位于这些模式出现之间的几个行序列。
但是,假设我只想打印文件中的最后一个这样的序列。我可以用 sed 做到这一点吗?如果没有,我想可能是awk?还有什么?
笔记:
我想编写一个函数来检查给定的变量,例如,var以给定字符串列表中的任何单词开头。这个列表不会改变。
为了实例化,让我们假设我想检查是否var以aa,abc或开头3@3。
此外,我想检查是否var包含字符>.
假设这个函数被调用check_func。我的预期用途看起来像
if check_func "$var"; then
do stuff
fi
Run Code Online (Sandbox Code Playgroud)
例如,应该“做的东西”了
aardvark,abcdef,3@3com.com和12>5。
我已经看到这个 SO 问题,其中用户提供了部分工作:
beginswith() { case $2 in "$1"*) true;; *) false;; esac; }
Run Code Online (Sandbox Code Playgroud)
我的想法是我会遍历上面提到的列表并使用这个函数。我的困难在于不完全理解应该如何退出(或任何替代返回)来完成这项工作。
所以我有一个程序(比如,programA),它会给我一个输出,例如:yes, no, maybe, probably, possibly, impossible, banana。
我想制作一个脚本,它可以根据该输出执行某些操作,无论它是什么。假设我只需要考虑yes,maybe和banana。
到目前为止,我会做的是case像这样使用:
case $program_output in
yes) echo "good word: $program_output" ;;
maybe) echo "good word: $program_output" ;;
banana) echo "good word: $program_output" ;;
*) echo "bad word: $program_output" ;;
esac
Run Code Online (Sandbox Code Playgroud)
但最近我在摆弄这个if语句,发现我可以像这样更快地做到这一点:
if [[ "yesmaybebanana" =~ ${program_output} ]]; then
echo "good word: ${program_output}"; else echo "bad word: ${program_output}";
fi
Run Code Online (Sandbox Code Playgroud)
有什么理由我不应该为此使用该if语句吗?这是一种$program_output不能有空格的情况,并且它是可以输出的有限单词列表。
使用jq,我想通过正则表达式搜索模式,并用标签之类的东西包装匹配的字符串<div>
$ echo "\"This is a valid json file"\" | jq '. | gsub("valid";"how_to_refer_to_matches";"i") -
Run Code Online (Sandbox Code Playgroud)
如何引用第二个参数中的匹配结果gsub?
如果匹配项超过 1 个怎么办?
假设我有两个可能的路径,我想列出 Linux 计算机上的目录和文件:
/some/path1/
/some/path2/
Run Code Online (Sandbox Code Playgroud)
如果我在 中执行以下操作,如果或至少之一存在,tcsh我会得到退出代码:0path1path2
ls -d /some/{path1,path2}/*
Run Code Online (Sandbox Code Playgroud)
但是,如果我在 中执行完全相同的操作bash,则会收到2退出代码,并显示一条stderr消息报告path1不存在(如果 path1 是不存在的路径)。
在这种情况下我怎样才能表现bash得像这样?如果至少存在一条路径,是否有一个我可以要求它返回的tcsh开关?如果两者都不存在,我确实期望非零代码,这就是返回的内容。ls0tcsh
我有以下数据块(多个)
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) 在编写一些awk代码时,我使用了4.1.0--lint的选项gawk。令我惊讶的是我收到了警告
警告:“[ob]”形式的范围取决于区域设置
但我的代码只有foo-bar字符类的外部。简化示例:
{ match($2, /^uid=([^,]+),dc=foo-bar$/, m) }
Run Code Online (Sandbox Code Playgroud)
另外我认为 gawk 4.2.1 不再输出该警告,那么这是一个错误吗gawk?