linux中的正则表达式(linux 的正则表达式)

如何去除Linux文件的^M字符?

在linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件。我们会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致,

对于回车符的定义:

windows:0D0A

unixlinux: 0A

MAC: 0D

比较快捷的去除这些符号的方法有这么几种:

(1)是用VI的命令:

使用vi打开文本文件

vi dos.txt

命令模式下输入

:set fileformat=unix

:w

(2) VI下使用正则表达式替换

g/^M/s/^M//

或者

%s/^M//g

(3)使用sed 工具

sed ’s/^M//’ filename > tmp_filename

(4)既然window下的回车符多了‘r’,那么当然通过删除‘r’ ,也可以实现:

tr -d 'r'

(5)最后一个方法是本人最常用的方法,个人觉得最方便

在终端下敲命令:

$ dos2unix filename

直接转换成unix格式,就OK了!~

Linuxshell中如何从路径名提取指定字符串?

这个不需要正则式效率差,难理解。使用两次shell 扩展就可以了。#!/bin/basha="$1"a="${a##*-}"#从开头删除到顺数最后一个减号。a="${a%.*}"#从结尾删除到倒数第一个小数点。

echo "$a" 脚本保存为 a.sh执行命令 ./a.sh “/home/ lxy/hhhhh-a.bbb.cc.d”请把参数用引号括住。得到 a.bbb.cc说明:${parameter#pattern}和${parameter##pattern} 掐头,#是最小匹配,##是最大匹配,将变量从开头匹配pattern,最后扩展为原变量值去掉匹配的内容后的内容。

${parameter%pattern}和${parameter%%pattern} 去尾,%是最小匹配,%%是最大匹配,将变量从结尾匹配pattern,最后扩展为原变量值去掉匹配的内容后的内容。

linux tac命令详解?

用法:tac ... ...

将每个指定文件按行倒置并写到标准输出。

如果不指定文件,或文件为"-",则从标准输入读取数据。

长选项必须使用的参数对于短选项时也是必需使用的。

-b, --before 在行前而非行尾添加分隔标志

-r, --regex 将分隔标志视作正则表达式来解析

-s, --separator=字符串 使用指定字符串代替换行作为分隔标志

--help 显示此帮助信息并退出

--version 显示版本信息并退出

linux编辑模式怎么取消字符标注?

在linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件。我们会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致,

对于回车符的定义:

windows:0D0A

unixlinux: 0A

MAC: 0D

比较快捷的去除这些符号的方法有这么几种:

(1)是用VI的命令:

使用vi打开文本文件

vi dos.txt

命令模式下输入

:set fileformat=unix

:w

(2) VI下使用正则表达式替换

g/^M/s/^M//

或者

%s/^M//g

(3)使用sed 工具

sed ’s/^M//’ filename > tmp_filename

(4)既然window下的回车符多了‘r’,那么当然通过删除‘r’ ,也可以实现:

tr -d 'r'

(5)最后一个方法是本人最常用的方法,个人觉得最方便

在终端下敲命令:

$ dos2unix filename

直接转换成unix格式,就OK了!~

linux下对文件重命名是什么命令?

linux的文件重命名非常简单。常用的是mv命令和rename命令。下面介绍一下这两个命令的用法,具体结节可以参考手册。

1、mvmv fromfile tofile 如把文件a.txt得命名为b.txt,可以是mv a.txt b.txt。 mv一次只能重命名一个文件,而且,它是移动命令。如果tofile已经存在的话,会直接装原文件覆盖,从而造成文件的丢失。当然有选项可以对已存在的文件进行提示,但是,我表示,那个选项我还真不常用。综合这两点考虑,还是决定看看rename吧。

2、renamerename frompart topart filename 或者 rename 's/frompart/topart/' filename 如把文件a.txt得命名为b.txt,可以是rename 'a' 'b' a.txt (这个没有试过,看网上别人说的,是这样子的。)还可以是:rename 's/^a/b/' a.txt 在有的系统之上,用前面的那句可以通过,在有的系统之上,用后面的这个可以通过。两个不一样,一个是C的,一个是perl的。明显看出,后面这条是正则表达式的写法。具体采用哪一种方式,可以man rename,在手册页的最后一行看版本。由于我使用的系统rename的版本是Perl的,所以我只能采用后面的这一种方式。 rename 强大 的地方在于,你可以使用*,?等,对所有符合条件的文件名进行批量修改。而你在使用mv的时候,只能采用写脚本,用循环的方式来解决。

你可能想看:
分享给朋友: