seq --help
Usage: seq [OPTION]... LAST
or: seq [OPTION]... FIRST LAST
or: seq [OPTION]... FIRST INCREMENT LAST
Print numbers from FIRST to LAST, in steps of INCREMENT.
Mandatory arguments to long options are mandatory for short options too.
-f, --format=FORMAT use printf style floating-point FORMAT
-s, --separator=STRING use STRING to separate numbers (default: \n)
-w, --equal-width equalize width by padding with leading zeroes
--help display this help and exit
--version output version information and exit
seq 选项[-s " "][-w] FIRST INCREMENT LAST
注意 选项紧跟seq, 位于序列数字FIRST INCREMENT LAST之前,FIRST INCREMENT LAST放在最后
比如
seq -s " " -w 2 100 1000
root@gua-vm1:/vob# seq 10
1
2
3
4
5
6
7
8
9
10
root@gua-vm1:/vob# seq -s " " 10
1 2 3 4 5 6 7 8 9 10
r
打印全部列
awk '{print $0}'
打印指定列
awk '{print $2,$4}'
打印指定列并拼接字符串
awk '{print $1,"hhah",$2}'
awk '{print $1"hahah"$2}'
按指定分隔符取列
awk -F: '{ print $1 }'
打印某一列及后面所有列的内容
awk '{out=""; for(i=2;i<=NF;i++){out=out" "$i}; print out}'
打印最后一列,最后一列的前一列,NF表示最后一列的列号
awk '{print $NF, $(NF-1)}'
打印指定一行,NR表示行号
awk 'NR==6 {print $0}'
打印第六行,以 :分隔开的第一列
awk -F ":" 'NR==6 {print $1}'
打印第4行以后的行
git log --pretty=format:"%H-%h:%h" -n 15 |cat -n | awk 'NR>4 {print $0}'
5 1f021028e22d92119fa5a0821273596e0c37be87-1f02102:1f02102
6 f36b0ad5a376edf485979b357af4ac1df87cc443-f36b0ad:f36b0ad
7 e3776955f8f3592051603d2299b93d3b55cbc52a-e377695:e377695
8 94c50a1fd810d5c1e62535fac8f6db3c01c4c476-94c50a1:94c50a1
git log --pretty=format:"%H-%h:%h" -n 15 |cat -n | awk 'NR<4 {print $0}'
git log --pretty=format:"%H-%h:%h" -n 15 |cat -n | awk 'NR<=4 {print $0}'
条件用法
打印包含 Merge branch 的行 用/strings/
git log --pretty=format:"%
设置密码复杂度
http://www.linux-pam.org/Linux-PAM-html/sag-pam_cracklib.html
安装libpam-cracklib
apt-get install libpam-cracklib
修改文件 /etc/pam/common-password
中的配置,修改完保存即生效。
如果有加enforce_for_root ,则对root 有效。
默认对root无效。 当root 为操作修改的用户时,虽然会提示,但是仍能修改成功。
vi common-password
password requisite pam_cracklib.so retry=3 minlen=8 difok=3 dcredit=-1 ocredit=-1 enforce_for_root
以上例子为:可重试三次,密码最少8个字符,与旧密码至少3个字符不同,至少一个数字,至少一个符号,对root操作也有效。
http://www.linux-pam.org/Linux-PAM-html/sag-pam_cracklib.html
-----------------
difok=N
This argument will change the default of 5 for the number of character changes in the new password that differentiate it from the old password.
minlen=N
The minimum acceptable size for the new password (plus one if credits are not disabled which is the default). In addition to the number of characters in the new password, credit (of +1 in length) is given for each different kind of character (other, upper, lower and digit). The default for this parameter is 9 whic
svn 强制提交日志
分析:
检查时间:提交前
效果:日志符合要求成功提交,日志不符合要求给出提示,并中断提交。
适用钩子脚本:svn -> hooks -> pre-commit (commit 前触发执行的脚本),当svn 有commit 请求时,会触发执行pre-commit(shell脚本),当这个脚本以非0退出时,中断commit , 当脚本正常退出时,允许commit.
进入版本库配置目录hooks ,可见模板 pre-commit.tmpl ,复制为pre-commit 。
root@tclserver:/var/svn/svn_dir/Auto_script/hooks# ll
-rwxr-xr-x 1 root root 3350 Apr 6 2017 pre-commit*
-rwxr-xr-x 1 root root 3510 Feb 6 2017 pre-commit.tmpl*
pre-commit.tmpl 原模板的内容分析
# PRE-COMMIT HOOK # # The pre-commit hook is invoked before a Subversion txn is # committed. Subversion runs this hook by invoking a program # (script, executable, binary, etc.) named 'pre-commit' (for which # this file is a template), with the following ordered arguments: # # [1] REPOS-PATH (the path to this repository) # [2] TXN-NAME (the name of the txn about to be committed) # ........ REPOS="$1" TXN="$2" # Make sure that the log message contains some text. SVNLOOK=/usr/bin/svnlook $SVNLOOK log -t "$TXN" "$REPOS" | \ grep "[a-zA-Z0-9]" > /dev/null |
https://stedolan.github.io/jq/download/
https://stedolan.github.io/jq/manual/#Invokingjq
这是一个开源工具,用于处理json 。
"The API uses JSON to serialize data. You don’t need to specify .json at the end of an API URL."
在linux 下使用gitlab API 返回json 对象,经常使用python处理返回结果。 如果只是单纯地使用shell脚本中,常将其当作文本,并用sed ,grep,cut分解。但是因为它不是准确地分解对象中的组成,而是简单地通过关键字进行筛选和切割,所以经常会有遗漏或不够准确。
在linux 中安装jq , 可以在shell 中直接使用jq 对json 对象进行处理。
# configure ,make ,make install
cd jq
autoreconf -i
./configure --disable-maintainer-mode
make
sudo make install
[root@huangbei ~]# chmod +x jq-linux64
[root@huangbei ~]# mv jq-linux64 /usr/bin/jq
[root@huangbei ~]# jq
jq - commandline JSON processor [version 1.6]
Usage: jq [options] <jq filter> [file...]
jq [options] --args <jq filter> [strings...]
jq [options] --jsonargs <jq filter> [JSON_TEXTS...]
jq is a tool for processing JSON inputs, applying the given
echo ${#Massage}
echo $Massage | awk '{print length($0)}'
[lcf@huangbei ~]$ Massage=" Usage: $0 \${RELEASE_NOTE_FULL_PATH} "
[lcf@huangbei ~]$ echo ${#Massage}
39
[lcf@huangbei ~]$ echo $Massage | awk '{print length($0)}'
37
[lcf@huangbei ~]$ Massage="Usage: $0 \${RELEASE_NOTE_FULL_PATH}"
[lcf@huangbei ~]$ echo ${#Massage}
37
shell 里做 判断时[ 左边一直报错,语法无问题,有redhat 里执行没有问题,脚本放到ubuntu 时报错
[: test: unexpected operator
解决:
ubuntu 的shell 默认指向dash , 需要改回bash
sudo dpkg-reconfigure dash
选择 no
sed -i "/key/c\modify key line " file
#把file 中带有 key 的所有行替换为modify key line
eg.
change_list=`cat temp3.txt `
for i in ${change_list}
do
if [[ $exp ]]; then
sed -i "/${i}/c\\${i} <-- change" temp2.txt
fi
done
在exit 0 前面插入一行:i
sed -i '/^exit 0/i \/sbin\/start ttyS0' /etc/rc.local
在exit 0 后面插入一行:a
sed -i '/^exit 0/a \/sbin\/start ttyS0' /etc/rc.local
处理同一个打印结果 中,取多行标题及关键字匹配行
accurev show wspaces | head -n 5 ; accurev show wspaces | grep EPDG_R16
以上accurev show wspaces 执行了两次,在两次结果里各取结果 再拼接,效率较低
sed -n '1,5p'
sed -n '/xxxxx/p'
sed -n '1,5p;/^EPDG_R16_xxxx/p'
使用sed 将两个条件用分号串成多个条件,对结果进行“或关系”匹配
accurev show wspaces | sed -n '1,5p;/^EPDG_R16_xxxx/p'
Stream #
| Target X-Action
| | X-Action
paste text1.txt text2.txt
B="case_"${A}".test"
cat temp.txt | while read line
do
echo MME_case${line}.test >>temp_MME.txt
done
从左边开始匹配:# ## 从右边开始匹配:% %% 最大化匹配:叠号 ## %% (从左/右匹配,当匹配到多个关键符时,匹配到最后一个停下) 最小化匹配:单号 # % (从左/右匹配,当匹配到多个关键符时,匹配到第一个停下) 从左匹配,* 号放在匹配符左边: */ *. *- 从右匹配,* 号放在匹配符右边: /* .* var=/vob/lcf/test.txt 常用取文件名:剩下的是从左起最后一个/的右边部分 ${var##*/} 常用取后缀:剩下的是从左起最后一个.的右边部分 ${var##*.} 常用取路径:剩下的是从右起第一个.的左边部分 ${var%/*}
.......