只是好奇为什么 8 个数字在 linux(CentOS,如果重要)中被接受为密码,而不是非字典单词上的 8 个字符。
毕竟每个数字是 10 对 26。(52 个计数区分大小写)
我的输入来自包含特殊转义字符的管道。为了便于说明,该流如下所示:
printf "foo.bar\033[00m" > file
cat file
Run Code Online (Sandbox Code Playgroud)
如何删除尾随.bar\033[00m
?我已尝试以下方法,但这不起作用:
cat file | sed 's/\.bar\033[00m//'
Run Code Online (Sandbox Code Playgroud) 说,我有一个文件,必须在其中搜索多个正则表达式,并且必须计算每个正则表达式的匹配数。
因此,我无法组合这些模式:
grep -Po '{regex_1}|{regex_2}|...|{regex_n}' file | wc -l
Run Code Online (Sandbox Code Playgroud)
... 因为需要每个正则表达式的出现次数。
我显然可以:
occurences[i]=$(grep -Po "${regex[i]}" file | wc -l)
Run Code Online (Sandbox Code Playgroud)
...但不幸的是,遇到的文件可能非常大(> 1 GB)并且有许多模式(在数千个范围内)需要检查,这使得该过程非常缓慢,因为对同一文件进行多次读取涉及。
有没有办法快速做到这一点?
我在格式化长字符串输入的嵌套 for 循环时遇到问题:
我目前正在使用以下嵌套的 for 循环来命名来自我省略的单独程序的输出文件:
#!/bin/bash
for hemi in lh rh
do
for measure in thickness area volume meancurv gauscurv foldind curvind
do
echo ${hemi}"--"${measure}
done
done
Run Code Online (Sandbox Code Playgroud)
我希望能够像下面这样格式化循环,以方便运行多个不同的循环,其中包含可能需要修改的更长的数组列表。只需要在一个地方修改列表将大大减少错误/遗漏等的机会:
#!/bin/bash
hemi=( lh rh )
measure=( thickness area volume meancurv gauscurv foldind curvind )
for((i=${hemi[${i}]};i<2;i++));do
for((j=${measure[${j}]};j<7;j++));do
echo ${hemi[${i}]}"--"${measure[${j}]}
done
done
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出,我无法弄清楚我做错了什么:
lh--thickness
lh--area
lh--volume
lh--meancurv
lh--gauscurv
lh--foldind
lh--curvind
./for_loop_testing.sh: line 7: ((: j=: syntax error: operand expected (error token is "=")
Run Code Online (Sandbox Code Playgroud) $ bash -version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)
考虑以下 shell 脚本:
#!/bin/bash
declare -A PROVS=( ["NL"]=10 ["PE"]=11 ["NS"]=12 ["NB"]=13 ["QC"]=24 ["ON"]=35 ["MB"]=46 ["SK"]=47 ["AB"]=48 ["BC"]=59 ["YK"]=60 ["NT"]=61 ["NU"]=62 )
for key in "${!PROVS[@]}" ; do \
touch "foo_${key}_${PROVS[${key}]}" ; \
done
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 Makefile 中执行等效操作:
SHELL := /bin/bash
.PHONY: foo
foo:
declare -A PROVS=( ["NL"]=10 ["PE"]=11 ["NS"]=12 ["NB"]=13 ["QC"]=24 ["ON"]=35 ["MB"]=46 ["SK"]=47 ["AB"]=48 ["BC"]=59 ["YK"]=60 ["NT"]=61 ["NU"]=62 )
for key in "$${!PROVS[@]}" ; do \
touch "foo_$${key}_$${PROVS[$${key}]}" ; \
done
Run Code Online (Sandbox Code Playgroud)
我 …
我知道Alt+.在 bash 中显示前一个参数。
但是,如果我通过了所需的参数(按Alt+.一次太多次)并且我想在历史中前进怎么办?
有没有组合键?
假设我有FileA.txt,它看起来有点像这样:
43287134, string1, string2
1233, foo, bar
973, barfoo, foobar
7464, asdf, ghjk
Run Code Online (Sandbox Code Playgroud)
我有带有这些正则表达式的FileB.txt,用一行分隔:
^973,
^1233,
Run Code Online (Sandbox Code Playgroud)
我想申请FileB.txt正则表达式到FileA.txt,并删除线相匹配的,这样最终的结果将是:
43287134, string1, string2
7464, asdf, ghjk
Run Code Online (Sandbox Code Playgroud)
有没有可用的工具来做到这一点?谢谢!
这个脚本很好用,我修改了它以增加 5。我的问题是我不需要最后一个逗号,我不知道如何删除它。
for ((i=1, j=0; i <= 12 ; i++, j=j+5))
do
echo -n "$j,"
done
Run Code Online (Sandbox Code Playgroud) 我只是想将字符串转换$RECORD_HDR
为数字$RECORD_SIZE
,其中
echo $RECORD_HDR
给出 003D 并且
echo $RECORD_SIZE
应该给出 61
这在理论上应该只是多余的,因为它更改为当前工作目录。无论如何,在实践中是否有任何场景,此命令可能有用?
bash ×5
shell-script ×2
arithmetic ×1
cd-command ×1
command-line ×1
filesystems ×1
grep ×1
make ×1
password ×1
patterns ×1
readline ×1
search ×1
security ×1
sed ×1
shell ×1