作者:matrix
发布时间:2019-11-06
分类:command Linux
awk用于unix的文本处理,经常出现和使用。读取每一行文本进行格式化输出。
测试环境 Macos
awk简单操作
默认使用空格进行字符串分割
echo '1 2 3' |awk '{print $0}' # 1 2 3
echo '1 2 3' |awk '{print $3}' # 3
echo -e "1\n2\n3" |awk '/[23]/' #正则条件查找
echo -e "abc\n1a2\n33" |awk '/a/' #正则条件查找字母a
awk '{print $3}' file_path #指定文件
ls -alh|awk '/^d/' #输出目录
# drwxr-xr-x 3 panc staff 96B 7 16 23:32 pt-program
echo '1-2-3' |awk -F '-' '{print $2}' #指定分割符号 - 输出 2
$0
表示当前行
$1
表示第一个分割的字段
awk命令后面跟操作的语句字符串''
包裹,每个语句段落用花括号{}
包裹,语句段落中用分号;
分隔语句。
echo -e '1 2 3\n4 5 6' |awk '{print $0;print("-end-")}'
echo -e '1 2 3\n4 5 6' |awk '{print $0;}{print("-end-")}'
#上面输出结果相同
#1 2 3
#-end-
#4 5 6
#-end-
echo -e '1 2 3\n4 5 6' |awk '{print $1,$3}'
#输出
#1 3
#4 6
使用内置变量
NF
表示当前行有多少个分割字段
echo '1-2-3' |awk -F '-' '{print $(NF)}' # 3 获取最后一个分割字符
echo '1-2-3' |awk -F '-' '{print $(NF-1)}' # 2 获取倒数第二个分割字符
其他变量
NR
表示当前处理的是第几行
BEGIN预处理
在执行处理之前提前设置一些信息
比如之前的-F
参数可以使用BEGIN来设置
echo -e "a-b-c" |awk 'BEGIN{FS="-"} /^a/{print $0}' #设置分割符为-
echo -e "a-b-c" |awk 'BEGIN{FS="-";print "this title::"} {print $0}' #设置输出的首行标题
echo -e "1122\n3344" |awk 'BEGIN{FIELDWIDTHS="2 2";} {print $1,$2}' #固定字段宽度 (mac os中测试失败)
#输出
#11 22
#33 44
内置变量
FS字段分隔符
FIELDWIDTHS指定字段宽度
ORS指定输出的行分隔符
if逻辑处理
awk还可以支持函数和复杂的逻辑处理,完全可以在里面定义函数 调用 判断
例子:
显示红色error
绿色seccess
白色log
echo -e 'success\nerror\nsuccess\nloginfo' | awk \
'{
if (/error/) {
print "\033[91m" $0 "\033[0m"
} else if (/success/){
print "\033[32m" $0 "\033[0m";
}else{
print $0
}
next;
}'
上面语句有换行的段落方便阅览。一行简写也是可以
例子:
判断值大小
echo -e '12\n14\n232\n90' |awk '{if($0>=90) print $0}' #输出>=90的数据
#232
#90
for循环
使用for循环计算求和
echo '5' |awk '{ \
total = 0
for (var = 1; var < $0; var++)
{
total += var
}
print "total:",total
}'
Built-In Functions函数使用
awk中语义中支持函数的使用
echo -e 'H htjim\nDot\ncom\n009' |awk '{print toupper($0)}'#转换为大写
内置函数
toupper 转换为大写
tolower 转换为小写
rand 随机数
其他函数参考手册:
https://www.gnu.org/software/gawk/manual/html_node/Built_002din.html#Built_002din
自定义函数
自定义彩色文字输出函数awk内部执行调用
echo -e 'success\nerror\nsuccess\nloginfo' | awk \
'
function red(s) {
printf "\033[1;31m" s "\033[0m "
}
function green(s) {
printf "\033[1;32m" s "\033[0m "
}
function blue(s) {
printf "\033[1;34m" s "\033[0m "
}
{
if (/error/) {
print red($0)
} else if (/success/){
print green($0)
}else{
print blue($0)
}
}'
其他例子
结合tail -f log
显示红色报错提示
tail -f test.log | awk '{
if (/success/) {
print "\033[91m" $0 "\033[0m"
} else {
print "\033[32m" $0 "\033[0m";
}
next;
}';
next
用于直接跳到下一行文本进行执行 有点continue
的意思
参考:
https://likegeeks.com/awk-command/
http://www.ruanyifeng.com/blog/2018/11/awk.html
https://www.cnblogs.com/Linuxprobe/p/5745381.html
作者:matrix
发布时间:2019-10-19
分类:command Linux
今天看到2>&1
和>/dev/null 2>&1
有点相似但又完全不同,一直都是CV方式来使用 仅知道后者用于禁止所有输出信息。
简单整理笔记
基本操作符号和数字描述符号
>
用于输出覆盖内容,>>
用于输出追加内容
<
用于输入,<<
用于设置输入结束符号
<<end
:表示当输入end
的时候结束输入操作
/dev/null
表示Linux中的空设备,也当是数据黑洞,无限吞噬。
类型 |
文件描述符 |
默认情况 |
对应文件句柄位置 |
标准输入(standard input) |
0 |
从键盘获得输入 |
/proc/self/fd/0 |
标准输出(standard output) |
1 |
输出到屏幕(即控制台) |
/proc/self/fd/1 |
错误输出(error output) |
2 |
输出到屏幕(即控制台) |
/proc/self/fd/2 |
输出内容重定向
command >/dev/null 2>&1
这样执行就不会有任何信息显示和保存
补充命令之后:
command 1>/dev/null 2>&1
说明:
>/dev/null
等同于1>/dev/null
意思是 当前控制台的信息输出到空设备。
2>&1
使用&
符号将2重定向绑定到1,意思是将错误信息指向控制台,而这个时候的控制台又指向了空设备。
如果去掉&
符号的2>1
会导致错误信息输出到文件名为1
里面。
linux执行命令时会按顺序从左到右读取来确定0,1,2这三个输入输出的位置。
command 2>&1 >/dev/null
把两个重定向的位置写反之后就是完全不同的意思。
等同于command 2>&1 1>/dev/null
linux执行命令到2>&1
会将错误输出指向1即控制台,到这里就会完成错误输出(2)的位置确定。也就不会更改了。
执行到1>/dev/null
会将标准输出(1)指向空设备,而此时的错误输出(2)已经确定位置了就不会发生更改。
所以最终错误信息显示到控制台,正常信息不会看到。
参考:
https://blog.csdn.net/zhaominpro/article/details/82630528
https://www.cnblogs.com/ultranms/p/9353157.html
https://blog.csdn.net/wz947324/article/details/80005224
作者:matrix
发布时间:2019-04-29
分类:Linux
linux重启守护进程可以使用-HUP
参数来发送hang up挂断信号,系统会重启进程进行复位操作重新读取配置文件
There are also different signals that can be sent to both kill commands. What signal you send will be determined by what results you want from the kill command. For instance, you can send the HUP (hang up) signal to the kill command, which will effectively restart the process. This is always a wise choice when you need the process to immediately restart (such as in the case of a daemon). You can get a list of all the signals that can be sent to the kill command by issuing kill -l. You’ll find quite a large number of signals>
usage
指定进程ID 1011:
kill -HUP 1011
使用/var/run查看进程的ID,操作指定进程
kill -HUP `cat /var/run/nginx.pid`
-HUP无法生效参考:
https://docs.oracle.com/cd/E19253-01/819-7842/fhkpa/index.html
参考:
https://www.linux.com/learn/intro-to-Linux/2017/5/how-kill-process-command-line
https://blog.csdn.net/u011350541/article/details/50718085
https://www.cnblogs.com/codingcloud/p/5095066.html
作者:matrix
发布时间:2019-02-22
分类:零零星星
win上的打包的文件丢到linux解压发现中文的前缀乱码,本来mv
命令到是可以修改 顾于文件太多,发现用rename
方便的多
需要将╬в╨┼═╝╞м_20180626102853.jpg
修改还原为微信图片_20180626102853.jpg
执行操作
文件数量有点多执行
命令$:rename 's/╬в╨┼═╝╞м(.*)/微信图片$1/' *
rename --help
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E *perlexpr*]*|*perlexpr*
[ *files* ]
Options:
-v, -verbose
Verbose: print names of files successfully renamed.
-n, -nono
No action: print names of files to be renamed, but don't rename.
-f, -force
Over write: allow existing files to be over-written.
-h, -help
Help: print SYNOPSIS and OPTIONS.
-m, -man
Manual: print manual page.
-V, -version
Version: show version number.
-e Expression: code to act on files name.
May be repeated to build up code (like "perl -e"). If no -e, the
first argument is used as code.
-E Statement: code to act on files name, as -e but terminated by
';'.
perlexpr表达式
perlexpr还可用于其他命令,如sed
perlexpr表达式形如:
- Substitution替换
s / expr1 / expr2 / [gi]
/
为分界符,可以使用其他任意字符为分界符
expr1,expr2
都支持正则
expr1
会被查找替换为expr2
。
ig
两个字母分别为正则的匹配模式:忽略大小写和全局匹配,否则默认换行为分界符。方括号[]包裹表示他们可不填。
-
Translation字符转译
类似于替换s
,它可用于将一个字符串转换为另一个字符串,即字符转换。表达式如:y/charset1/charset2/
如:
转换为小写:rename 'y/A-Z/a-z/' *
添加txt后缀:rename 's/$/\.txt/' *
PEACE~
参考:
https://www.computerhope.com/unix/rename.htm
https://wangchujiang.com/linux-command/c/rename.html
https://blog.csdn.net/qq_37858386/article/details/78404001
http://bbs.chinaunix.net/thread-4119882-1-1.html
作者:matrix
发布时间:2016-12-30
分类:零零星星
安装环境
按照ubuntu正常安装的时候却报错:
Lnmp Unable to get linux distribution name, or do NOT support the current di
原因是因为 /etc/issue 中记录的是linux发行版本:elementary OS Loki
Lnmp脚本无法识别出为ubuntu的系统内核
修改main.sh文件
文件路径:/lnmp1.3/include/main.sh
搜索关键字Get_Dist_Name()查找该方法替换为一下内容:
Get_Dist_Name()
{
if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then
DISTRO='CentOS'
PM='yum'
elif grep -Eqi "Red Hat Enterprise Linux Server" /etc/issue || grep -Eq "Red Hat Enterprise Linux Server" /etc/*-release; then
DISTRO='RHEL'
PM='yum'
elif grep -Eqi "Aliyun" /etc/issue || grep -Eq "Aliyun" /etc/*-release; then
DISTRO='Aliyun'
PM='yum'
elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; then
DISTRO='Fedora'
PM='yum'
elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then
DISTRO='Debian'
PM='apt'
elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then
DISTRO='Ubuntu'
PM='apt'
elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; then
DISTRO='Raspbian'
PM='apt'
elif grep -Eqi "Deepin" /etc/issue || grep -Eq "Deepin" /etc/*-release; then
DISTRO='Deepin'
PM='apt'
else
DISTRO='Ubuntu'
PM='apt'
fi
Get_OS_Bit
}
或者下载main.sh覆盖:http://pan.baidu.com/s/1hsyVSw8
然后再执行install.sh脚本安装就可以了
作者:matrix
发布时间:2013-04-09
分类:兼容并蓄
opie下载:http://dl.vmall.com/c05btluoox
传说小明可以安装opie系统 实现双系统
强大的linux,强大的小明~
阅读剩余部分 »
作者:matrix
发布时间:2011-08-05
分类:Wordpress 兼容并蓄
What is htaccess?
.htaccess是使用UNIX或linux 搭建的服务器中的一个特殊的文件,这个文件只存在于linux系统中,Win系列的主机是没有的。那 么.htaccess有什么功能呢?通俗点的讲,就是可以通过编写这个文件中的某些内容,进而实现.htaccess文件所在目录及其子目录的权限与功能 的设置,是自己的站点灵活多变,下面就介绍.htaccess文件关于WordPress的十个应用技巧,举一反三,这些应用技巧同样适用于其它站点程序.
1. 重定向WordPress的RSS Feed链接地址到Feedburner地址
除了修改WP的模板文件来定制其输出的RSS Feed链接地址外,还可以使用.htaccess文件来进行设置(替换yourrssfeedlink为自己的Feedburner地址)。
/*
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC]
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds2.feedburner.com/catswhocode [R=302,NC,L]
</IfModule>
*/
大家使用时别忘了把代码中的Feedburner地址替换为自己的
参考:How to redirect WordPress rss feeds to feedburner
2. 使用浏览器缓存
可以修改.htaccess文件让访问者使用浏览器缓存来优化其访问速度。
/*FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch “\.(jpg|gif|png|css|js)$”>
ExpiresActive on
ExpiresDefault “access plus 1 year”
</filesmatch>
</ifmodule>*/
3. 去除WordPress分类链接中的”/category/”
默认情况下,WordPress的分类链接显示的样式为:
http://e-spacy.com/blog/category/tech
其实其中的category部分没有任何意义,如果想去掉它可以修改.htaccess文件(替换yourblog为自己的网址)。
RewriteRule ^category/(.+)$ http://www.yourblog.com/$1 [R=301,L]
参考:How to remove category from your WordPress url
4. 阻止没有referrer来源链接的垃圾评论
阅读剩余部分 »