Ubuntu应用笔记


操作系统:ubuntu18.04

清华大学:
将source.list文件中的ubnuntu前缀改成 http://mirrors.tuna.tsinghua.edu.cn即可(后边的保持不变)。

设置用户自动登陆: 修改 /etc/lightdm/lightdm.conf文件

autologin-user=alex
autologin-user-timeout=0

虚拟机挂载hgfs目录:用mount命令挂载出错时

$ sudo vmhgfs-fuse -o allow_other .host:/ /mnt/hgfs

如果只是提示readonly模式,需要安装cifs-utils即可。


设置中文:
Settings-->Region & Language

安装中文(如果已安装过,则可以略过此步)
Manage Installed Languages --> Install/Remove Languages-->Chinese(simplified)

Language项选择汉语,重新登陆即可。

- 阅读全文 -

sed与awk学习笔记--sed篇


sed命令参数:
-e 一般含有多个命令时,才需-e选项,表示将下一参数解释为指令

$ sed -e ‘s/ MA/,Massachusetts/' -e 's/ PA,Pennsylvania/'

-n 表示阻止输入文件的输入,比如打印命令,不指定该参数,会造成匹配的打印两次,不匹配的打印一次

-f 后边跟随sed脚本

 $ sed -f script.sed infile

-i 表示修改写回输入文件(不可撤回)

$ sed -i '/^$/d' test.log

注意事项:

-i选项不要与-n选项同时使用,否则会有大坑,试试就知道了....
注意单引号与双引号的区别


通过vim行编辑器运行:删除所有空行

:g/^$/d

^$表示空行(正则表达式)


关于地址的说明:

vim行编辑器需要指定行号或者全局参数g,否则只操作当前行;
sed命令不需要指定行号或者全局,每行都会执行。

$ - 表示最后一行

两个条件(逗号分隔)表示范围:
50,$ - 表示第50行至最后一行
1,/^$/ - 表示第1行至第一个空行之间的所有行(删除邮件头)
/^#if 0/,/^#endif/ - 表示#if 0 与 #endif之间的语句

地址后边跟!表示不匹配该地址的所有行(取反,排除)
/^#if 0/,/^#endif/!- 表示#if 0 与 #endif之外的所有语句


删除空白行:
空白行不是空行,空白行有制表符或者空格符,空行啥都没有。

/^[\t\ ]*$/d

以制表符或空格开头,以制表符或空格结尾(包括了空行)

删除不包括空行的空白行:

/^[\t\ ][\t\ ]*$/d

第1个[\t\ ]表示至少有一个制表符或空格
第2个[\t\ ]与*结合表示0个或者多个制表符或空格

删除包含指定字符的行

/Hello/d

删除不包含指定字符的行: 正则表达式求反,在表达试后加!

/Hello/!d

显示包含指定字符(re)的行: grep就是这么来的^~^

/re/p

字符串替换:

/World/s/World/Alex/g

vi中一般省略第二个参数:

/World/s//Alex/g

而sed中:

‘s/World/Alex/g’

最后那个g表示,如果一行中有多个,全部替换掉,否则只替换第一个匹配项

字符串替换:删除行尾空白 注意行尾标志$

/[\t\ ]*$/s///

匹配非空行:将所有非空行都加上又引号

/^[^$]/s/.*/"&"/

^[^$]表示第一个字符不是结束符,方括号里面第一个字符^表示排除的意思。
&表示本行内容,用于行前或者行尾添加内容。

匹配指定行: 将10~20行的行首添加#

10,20s/.*/#&/      

删除^M:
windows文件的换行符为"\r\n"(回车换行),而unix文件的换行符为"\n"(换行),所以windos格式的文件会产生^M符号,所以只需要删除"\r"(回车)即可。

//s/\r//g

插入命令: i 在指定行插入指定内容,原来该行及以下的数据下移

在第10行插入一行内容:插入内容在第10行

'10i\hello world\' 

如果指定的是范围时,原来的每一行都插入指定内容

'1,10i\hello world\' 

追加命令: a 在指定行的下一行追加指定内容

在第10行后添加一行内容,添加的内容在第11行

10a\hello world\' 

如果指定的是范围时,原来的每一行都插入指定内容

'1,10a\hello world\' 

在最后一行添加内容:(双引号时$需要转义)

'$axxx=bbb'

修改命令: c 修改指定行的内容为指定内容(其他行不影响)

将第10行的内容,修改为指定内容,不管原来是什么

10a\hello world\' 

如果指定的是范围时,指定所范围行的全部内容修改为一条语句

'1,10c\hello world\' 

条件匹配时,每个匹配的行都修改

'/hello world/c\Hello World\'

转换命令: y

将小写字母转换成大写字母:

'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'

sed脚本

可以将sed命令放在一个文件中,通过-f参数调用

分组命令:
地址嵌套:

删除#if 0 ~ #endif 之间的所有空行
 /^#if 0/,/^#endif/{/^$/d}

多条命令:

/^#if 0/,/^#endif/{
    s/cow/horse/
    s/pig/cow/
}

通过脚本修改配置文件:

#!/bin/sh
ITEM=$1
VALUE=$2
#  如果值为空,则表示要注释掉该字段
if [ -z $VALUE ]; then
    # 判断字符串是否存在,如果存在则注释掉
    sed -i -e "/^[ \t]*$ITEM[ \t]*=/s//#&/" config.txt
else
    # 先查看字段是否存在,存在则修改之,不存在则新建之
    awk "/^[# \t]*$ITEM[ \t]*=/{x++} END{exit x}" config.txt 
    if [ $? -ne 0 ] ; then
        echo "字段已存在,修改之 $ITEM=$VALUE"
        sed -i -e "/^[# \t]*$ITEM[ \t]*=/c$ITEM=$VALUE" config.txt
    else
        echo "字段不存在,创建之 $ITEM=$VALUE"
        sed -i -e "\$a$ITEM=$VALUE" config.txt
    fi
fi
$ ./setval hdmi_grop 3

$ ./setval hdmi_grop

- 阅读全文 -

ANSI的屏幕控制码


文章说明:
在终端中,ANSI定义了用于屏幕显示的Escape屏幕控制码,在printf函数调用时可以输出具有颜色的字符。

其格式如下:

"\033[字背景颜色;字体颜色m字符串\033[0m" 

下面是常见的一些ANSI控制码。加颜色只是以下控制码中的一种:

\033[0m   关闭所有属性  
\033[1m   设置高亮度  
\033[4m   下划线  
\033[5m   闪烁  
\033[7m   反显  
\033[8m   消隐  
\033[30m   --   \033[37m   设置前景色  
\033[40m   --   \033[47m   设置背景色  
\033[nA     光标上移n行  
\033[nB     光标下移n行  
\033[nC     光标右移n行  
\033[nD     光标左移n行  
\033[y;xH   设置光标位置  
\033[2J     清屏  
\033[K      清除从光标到行尾的内容  
\033[s      保存光标位置  
\033[u      恢复光标位置  
\033[?25l   隐藏光标  
\033[?25h   显示光标
\033[2J\033[0;0H  清屏且将光标置顶

解释下具体含义:
颜色配置:

\[\033[1;31m\]

ANSI 色彩控制语法
\033 声明了转义序列的开始,
然后是 [ 开始定义颜色。
第一组数字:亮度 (普通0, 高亮度1, 闪烁2)。
第二组数字:顏色代码。

颜色分为背景色和字体色,30~39用来设置字体色,40~49设置背景:

背景色          字体色
40: 黑色        30: 黑色(black)
41: 红色        31: 红色(red)
42: 绿色        32: 绿色(green)
43: 黄色        33: 黄色(yellow)
44: 蓝色        34: 蓝色(blue)
45: 紫色        35: 紫色(magenta)
46: 深绿        36: 深绿(cyan)
47: 白色        37: 白色(white)

下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配

echo  "\033[30m 黑色字 \033[0m"
echo  "\033[31m 红色字 \033[0m"
echo  "\033[32m 绿色字 \033[0m"
echo  "\033[33m 黄色字 \033[0m"
echo  "\033[34m 蓝色字 \033[0m"
echo  "\033[35m 紫色字 \033[0m"
echo  "\033[36m 天蓝字 \033[0m"
echo  "\033[37m 白色字 \033[0m"

echo  "\033[40;37m 黑底白字 \033[0m"
echo  "\033[41;37m 红底白字 \033[0m"
echo  "\033[42;37m 绿底白字 \033[0m"
echo  "\033[43;37m 黄底白字 \033[0m"
echo  "\033[44;37m 蓝底白字 \033[0m"
echo  "\033[45;37m 紫底白字 \033[0m"
echo  "\033[46;37m 天蓝底白字 \033[0m"
echo  "\033[47;30m 白底黑字 \033[0m"

控制台输入echo命令,需要-e参数,脚本中的echo不需要-e参数

echo -e "\033[47;30m 白底黑字 \033[0m"

下面是一些关于颜色的宏:

#define NONE         "\033[m"
#define RED          "\033[0;32;31m"
#define LIGHT_RED    "\033[1;31m"
#define GREEN        "\033[0;32;32m"
#define LIGHT_GREEN  "\033[1;32m"
#define BLUE         "\033[0;32;34m"
#define LIGHT_BLUE   "\033[1;34m"
#define DARY_GRAY    "\033[1;30m"
#define CYAN         "\033[0;36m"
#define LIGHT_CYAN   "\033[1;36m"
#define PURPLE       "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN        "\033[0;33m"
#define YELLOW       "\033[1;33m"
#define LIGHT_GRAY   "\033[0;37m"
#define WHITE        "\033[1;37m"

记得在打印完之后,把颜色恢复成NONE,不然再后面的打印都会跟着变色。

关闭 ANSI 色彩控制,通常置于尾端。

\033[0m

参考文档:https://blog.csdn.net/lzuacm/article/details/8993785

- 阅读全文 -


Copyright©2025 春天花会开, All Rights Reserved. Email: webmaster@oroct.com