1,怎样显示一个文本的前10行?最后1行?
sed "10q" a.txt
sed -n "1,10p" a.txt
sed "1,10!d" a.txt
sed "11,$d" a.txt
sed "$!d" a.txt
sed -n "$p" a.txt
2,将文本的“;”“,”作为换行符其他字符不变?
sed "s/;/\n/g;s/,/\n/g" a.txt
3,显示文本第20行到25行之间的内容?
sed "20,25!d" a.txt
sed -n "20,25p" a.txt
4,显示文本的奇数行?偶数行?
sed -n "p;n" a.txt
sed -n "n;p" a.txt
5,在文本里包含"爱你"的字符换成”【爱你】“,包含“恨你”的字符换成"(恨你)"输出?
sed "s/爱你/【爱你】/g;s/恨你/【恨你】/g" a.txt
6,将文本里的这些字符%:^?<>*/\|&全部替换为空格?
sed "s// /g" a.txt
7,怎么显示纯英文行,中文行?中英文混合行?
利用ASCII码区分中英文
在ASCII码中,第0~32号及第127号(共34个)为控制字符或通讯专用字符
关于汉字编码,以GB2312码为例,是以两个ASCII字符为一个汉字编码,而且用的都是ASCII中扩展字符集(从128号到255号)中的编码组成
sed -n "/^*$/p" a.txt
sed -n "/^*$/p" a.txt
sed -n "/\|/p" a.txt
8,将奇偶行拼接成一行,比如12行合并,34行合并....?
sed "N;s/\n/ /" a.txt
9,如果当前行是以"我"字开头,怎么将它合并到上一行?
sed ":a;$!N;s/\n我/我/;ta;P;D" a.txt
10,将每一行首、尾、的所有空格删除?
sed "s/^ *//;s/ *$//" a.txt
11,给每一行的开头加上"echo"?
sed "s/^/echo/" a.txt
12,如果某行的行尾是以"。"结尾,就删除"。"
sed "s/。$//" a.txt
13,如果某行多于10个字符,就只显示该行前10个字符?
sed "s/\(^.\{10\}\).*/\1/" a.txt
14,如果某行包含数字,以20个字符为宽度将数字右对齐?
sed ":a;//s/^.\{,19\}$/ &/;ta" a.txt
15,倒置所有行,第一行成为最后一行,依次类推.....
sed "1!G;h;$!d" a.txt
16,将行中的字符逆序排列,第一个字成为最后一字,……
sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" a.txt
17,在每5行后增加一空白行
sed "n;n;n;n;G" a.txt
18,显示所有重复行
sed -n "G;s/\n/&&/;/^\(.*\n\).*\n\1/{P;d};s/\n//;h" a.txt
@echo off
for /f "delims=" %%a in (a.txt) do (
if /i defined %%a (echo %%a) else set %%a=a
)
19,在每行的第5个与第6个字符之间插入”/*“,第10与第11个字符之间插入"*/"。如果某行少于11个字符补空格后插入。
sed -e "s/^.\{,10\}$/& /;s/\(^.\{11\}\) *$/\1/;s`\(^.....\)\(.....\)\(.*\)`\1/*\2*/\3`" a.txt
20,对一个文件夹下的N个TXT文件进行处理,对每一个TXT里的每一行前面都加入000
@echo off
for /f "delims=" %%a in ('dir /a-d/b *.txt') do (
sed "s/^/000/w tmp_.txt" "%%a"
move tmp_.txt "%%a"
)
21,分割文本,将其1到100行保存为a_1.txt,101-200行保存为a_2.txt,以此类推...
@echo off
for /f %%i in ('sed -n "$=" a.txt') do set number=%%i
:loop
set /a num+=1
set /a n=(%num%-1)*100+1
set /a m=100*%num%
sed "%n%,%m%w a_%num%.txt" a.txt
if %m% LSS %number% goto :loop
22,按如下顺序重新排列行数:1,11;2,12;...;9,19;10,20;后面的行以此类推(每20行一个周期)
@echo off
for /f %%i in ('sed -n "$=" a.txt') do set num=%%i
:loop
set /a n+=1,count+=1
sed -n %n%p a.txt
set /a m=10+%n%
sed -n %m%p a.txt
if %count% EQU 10 set /a n+=10 & set count=0
if %n% LSS %num% goto :loop
pause
23,A文本每行插入到B文本中对应行后面,例如,A的第一行插到B的第一行后面,A的第二行插到B的第二行后面,以此类推。。。
@echo off
for /f %%i in ('sed -n "$=" a.txt') do set num=%%i
for /f %%i in ('sed -n "$=" b.txt') do set num2=%%i
if %num% LSS %num2% set num=%num2%
:loop
set /a n+=1
sed -n %n%p b.txt>>ba_tmp.txt
sed -n %n%p a.txt>>ba_tmp.txt
if %n% LSS %num% goto :loop
move ba_tmp.txt b.txt
sed函数参数 功能
: label 建立 script file 内指令互相参考的位置。
# 建立注解
{ } 集合有相同位址参数的指令。
! 不执行函数参数。
= 印出资料行数( line number )。
a\ 添加使用者输入的资料。
b label 将执行的指令跳至由 : 建立的参考位置。
c\ 以使用者输入的资料取代资料。
d 删除资料。
D 删除 pattern space 内的第一行资料。
g 拷贝资料从 hold space 至 pattern space 。
G 添加资料从 hold space 至 pattern space 。
h 拷贝资料从 pattern space 至 hold space 。
H 添加资料从 pattern space 至 hold space 。
l 印出 l 资料中的 nonprinting character 用 ASCII 码。
i\ 插入添加使用者输入的资料行。
n 读入下一笔资料到 pattern space。
N 添加下一笔资料到 pattern space。
p 印出资料。
P 印出 pattern space 内第一个行的资料。
q 跳出 sed 编辑。
r 读入它档内容。
s 替换字串。
t label 先执行一替换的编辑指令,如果替换成功,则将编辑指令跳至 : label 处执行。
w 写资料到它档内。
x 交换 hold space 与 pattern space 内容。
y 转换(transform)字元。