|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『楼 主』:
 stream editor (sed) for dos, win32,*nix
 
使用 LLM 解释/回答一下 
 
 
http://www.student.northpark.edu/pemente/sed/
 
 
 sed , very power  stream editor for filtering text....input...etc
 
 
 
 GNU sed 4.07 now ported to MSDOS
 
 example for using sed under WinXP cmd.exe
 
 
 
 @echo off
 
 date /t
 
 ipconfig | findstr  /C:"IP Address" > NUL
 
 if errorlevel 1 (
 
 echo 127.0.0.1
 
 ) else (
 
 ipconfig | sed "s/IP Address/!d;s/.*: //"
 
 )
 
 
 
 example to make a if -else statment
 
 
 
 /^*****$/ {
 
 s/.*/&: \tNumber/
 
 t end
 
 }
 
 /^*****$/ {
 
 s/.*/&: \tLetter/
 
 t end
 
 }
 
 /^*****$/ {
 
 s/.*/&: \tNumber and letter/
 
 t end
 
 }
 
 /^
 
 *$/ {
 
 s/./A blank line/
 
 t end
 
 }
 
 
 
 :end
 
 
 
 under cygwin bash prompt :
 
 ~$ echo "123" | sed -f if-else.sed
 
 123: Number
 
 ~$ echo "wer" | sed -f if-else.sed
 
 wer: Letter
 
 
 
 you may check the wed site to find out more information with sed
 
 
 
 It is a free software,
 
 
 
 
 
 
 
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| Climbing 铂金会员
 
        网络独行侠
 
 
 积分 6962
 发帖 2753
 注册 2003-4-16
 来自 河北保定
 状态 离线
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『第 3 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
regluar expression  ==> sed , awk ,perl ,python ,tcl/tk, egrep, grep, ruby.... etc很多program 都用上,學它非常有用
 winxp 的 findstr 用的也是 regexp
 findstr /? 可看到它的簡單介紹
 
 sed 處理文本非常好用
 
 假如我有一文件如是,
 This is a first line.
 
 this is second.
 
 
 this is third.
 
 
 
 this is forth.
 
 
 
 
 
 
 this is fivth.
 
 我得把空行只剩一行在每行子之間,在第一行前加一空行,
 可寫一個 sed 腳本,如此
 
 /^.\{1,\}/ {
 i\
 (這個是真的空行)
 
 t end
 )
 :loop
 /^$/ {
 N
 /^\n$/D
 t loop
 }
 
 :end
 
 執行 sed -f blank.sed example.txt
 出來
 
 This is a first line.
 
 this is second
 
 this is third.
 ....
 
 higgly recommend
 
 
 
 
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『第 4 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
由于現在正在 Linux 下,又再試了一下 sed ,用來過濾和替換子串,這個bash script 用了 xmessage, 要在 X Window 用
 
 
 #!/bin/bash
 oLC_ALL=$LC_ALL
 LC_ALL=C
 export LC_ALL
 DATE=$(date +%d)
 case "$DATE" in
 0*) DATE=$(echo "$DATE" | sed 's/.//') ;;
 *) ;;
 esac
 cal |sed "s/\<$DATE\>/*&*/" |xmessage -file "-"
 unset LC_ALL
 LC_ALL=$oLC_ALL
 
 再一次 feel the power of sed.
 DOS ,Win32  一樣有它的用處
 
 
 
 
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| Climbing 铂金会员
 
        网络独行侠
 
 
 积分 6962
 发帖 2753
 注册 2003-4-16
 来自 河北保定
 状态 离线
 | 
| 『第 5 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
不错,确实很强大,但有几个问题阻止它被人们接受(包括我):1、版本太多,不同的版本支持不同的参数。2、命令行太复杂,没有一个通俗易懂的说明(尤其是中文说明)。3、太多的转义符号阻止了命令行的可读性,你不知道你会在什么时候掉入符号的陷阱。我看了半天FAQ,还是看不太明白楼上给出的几个例子,这就是这个命令无法应用的明证。 
 
 
 
 
 |  
                  |  偶只喜欢回答那些标题和描述都很清晰的帖子!
 如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『第 6 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
買本名 sed 與 awk 的 書看看,O'Reilly 出版,中文簡體版由機械工業出版社 出版,
 
 1、版本太多,不同的版本支持不同的参数。
 用 POSIX 支援的 sed 版本,任何sed script 用POSIX 寫法一定可行
 gnu sed 便可
 2、命令行太复杂,没有一个通俗易懂的说明(尤其是中文说明)。
 一點不複杂, 你沒看深入吧。
 
 3、太多的转义符号阻止了命令行的可读性,你不知道你会在什么时候掉入符号的陷阱。
 转义符号 不多, 你沒看過 perl 吧﹖
 我看了半天FAQ,还是看不太明白楼上给出的几个例子,这就是这个命令无法应用的明证。
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 只能說你不會,不是無法應用,sed 由 1978(?) 出現于 Unix,到今天
 是 *nix 標準工具之一,Perl 是 sed, awk, shell ,C 的superset,怎會無用﹖
 先學 regexp (正規表達式) 吧,用   XP 的 findstr 玩玩 如沒 *nix 的 grep
 
 
 
 
 
 
 
 
 
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| Climbing 铂金会员
 
        网络独行侠
 
 
 积分 6962
 发帖 2753
 注册 2003-4-16
 来自 河北保定
 状态 离线
 | 
| 『第 7 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
我本来就是不会,我也知道有什么所谓的正则表达式(即sed faq中的RE,但具体却不太明白)。但很难解释的是我在Gnu Sed及Super-Sed下,你所给出的这条命令均无法通过:D:\XYF\System\dos>ipconfig | sed "s/IP Address/!d;s/.*: //"sed: -e expression #1, char 19: Unknown option to `s'D:\XYF\System\dos>ipconfig | sed "s/IP Address/!d;s/.*://"
 sed: -e expression #1, char 19: Unknown option to `s'D:\XYF\System\dos>ipconfig | ssed "s/IP Address/!d;s/.*://"
 ssed: -e expression #1, char 19: Unknown option to `s'D:\XYF\System\dos>sed -V
 GNU sed version 4.0.9
 Copyright (C) 2003 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
 to the extent permitted by law.D:\XYF\System\dos>ssed -V
 super-sed version 3.59
 based on GNU sed version 3.02.80Copyright (C) 1999 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
 to the extent permitted by law.如果你连这么一个基本的命令不能运行也解释不明白的话,我就无话可说了。
 
 
 
 
 
 |  
                  |  偶只喜欢回答那些标题和描述都很清晰的帖子!
 如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| Climbing 铂金会员
 
        网络独行侠
 
 
 积分 6962
 发帖 2753
 注册 2003-4-16
 来自 河北保定
 状态 离线
 | 
| 『第 8 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
经过无数次的试验,这个命令倒是可以用的:ipconfig | sed -n "s/   IP Address*.*: //p"我大概解释一下意思:-n::表示除了用p指定的内容外,不打印其它内容s:表示替换
 "/   IP Address*.*: ":注意引号中的内容,表示查找“以三个空格开头后面跟着IP Address字符串,然后后面跟着*.*(表示任意字符串但包括一个.),再然后跟着一个“: ”(冒号+空格)”这样一行。
 "/":表示将上面查找的内容替换为空,中括号中的内容表示上文的内容。
 "/p":表示将余下的内容打印出来(正好就是IP地址了)。我知道我这样写的命令很不规范,但总比没有任何结果(或者只有错误结果)要好一些。
 
 
 
 
 
 |  
                  |  偶只喜欢回答那些标题和描述都很清晰的帖子!
 如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『第 9 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
sorry for using english cause in gb windowsXpD:\XYF\System\dos>ipconfig | sed "s/IP Address/!d;s/.*: //"  some typo on my post
 ^^^^^^^^^^^^^^^^^^^^^^^^^
 should be
 ipconfig | sed "/IP Address/!d;s/.*: //"
 means   find the string "IP Address" dont delete and then replace all letter in front of   : and a space with
 nothing , remain  string or whatever after :
 you may test how many dlls in C:\WINDOWS\systen32\
 under cmd
 cd C;\WINDOWS\system32
 dir | sed "/dll$/!d" | sed -n "$="
 I got 1228 dlls
 or
 dir | findstr "dll$" | sed -n "$="
 
 
 
 
 
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『第 10 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
some common use of sedUnder cmd.exe
 How many file in current dir
 dir | sed -n "$="
 I want 1 line output to terminal like Unix `head'  head -n1
 sed "1q" your_file.txt
 I want to delete  email header
 sed "1,/^$/d" whatever.eml
 I want to remain email header
 sed "/^$/,$d" whatever.eml
 I want the last line dont delete
 sed "$!d" whatever.txt
 I want to replace all `girl' string with `boy' in a txt
 sed "s/\<girl\>/boy/g" your.txt
 ...........
 
 many many use of sed
 
 
 
 
 
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| Climbing 铂金会员
 
        网络独行侠
 
 
 积分 6962
 发帖 2753
 注册 2003-4-16
 来自 河北保定
 状态 离线
 | 
| 『第 11 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
呵呵,你上面的命令的用法我倒还能看懂。你有一条命令有错误,就是看文件的第一行或者前几行(实际上可以自由发挥):sed -n "1p" somefile.txt      # 看第一行sed -n "3,5p" somefile.txt    # 看3到5行如果我想看文件最后几行如何写?说来说去,sed faq把问题搞复杂了,其实你摁住一个版本的sed,把它的用法讲明白了,然后再讲一下其它版本的有什么不同就容易理解了,但写faq的人弱智,搞的人头晕为止。我现在不明白的有这么几点:1、正则表达式都有哪些规则。我在网上没有找到文档,sed faq中提供的那个链接失效了,估计用google可以搜索到。2、sed中跟在那些/或者//的命令都有哪些,例如p表示打印,d表示删除,!d表示不删除,g表示global(全局)等。没有一个地方介绍完全,包括sed faq。其实学这东西也不复杂,只要找一个写的比较经典的例子从头讲到尾就可以了。 
 
 
 
 
 |  
                  |  偶只喜欢回答那些标题和描述都很清晰的帖子!
 如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『第 12 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
q is quit sed '1q' is equal to sed -n "1p"
 now I have write some regexp explaination, of course, not really good
 sed have 25 commands(may be wrong,i didnt check manual) , goto google find it out
 ----------------------------------------------------------------------------------------
 从 findstr 的 help 看 正规表达式与 sed 的使用
 一般表达式的快速参考:
 .        通配符: 任何字符
 *        重复: 以前字符是或类别出现零或零以上次数
 ^        行位置: 行的开始
 $        行位置: 行的终点
 字符类别: 任何在字符集中的字符
 补字符类别: 任何不在字符集中的字符
 范围: 在指定范围内的任何字符
 \x       Escape: 元字符 x 的文字用法
 \<xyz    字位置: 字的开始
 xyz\>    字位置: 字的结束
 under cmd.exe WinxP
 . ex:
 sed "s/./-/" 表示 a-z A-Z 0-9 %$#! etc 替换成 -
 如 C:\echo "abcd" | sed "s/./-/"
 -bcd
 * ex:
 sed "s/aa*/b/g" 表示  至少一个a , 或更多的a , * 是前字符a
 的零个或更多出现,  `g'的meaning 是全体替换
 C:\echo "aaaaabbbbccc" | sed "s/aa*/e/"
 ebbbbccc
 ^ ex:
 sed -n "/^a.*/p" 表示 由行的开始是a ,在后面是任何字符打印
 C:\ipconfig | sed -n "/^W.*/p" `p' 是sed 打印命令
 Windows IP Configuration
 $ ex:
 sed "s/Linux$/Windows/" 行的终点字符 `Linux' 替换成 Windows
 如有一个名 junk.txt , 内容是
 I Like Linux
 Dos is better then Linux
 
 sed "s/Linux$/Windows/g" junk.txt   `g'的meaning 是全体替换
 I like Windows
 Dos is better then Windows
 ex:
 任何在字符集中的字符,     ,
 C:\> date /t | sed "s/*-*-* //"
 仅仅 是 0,1,2,3,4,5,6,7,8,9 任何一个
 ex:
 sed "s/<*>*//"   <> 是表达 html tags ,
 那是除了 `>' 是任何字符, html tags 是 <br> </br>
 <html>whatever </html>
 sed "s/<*>*//g" whatever.html > whatever.txt
 脱去所有 html tags
 \x 不知道是不是
 \n ==> newline
 \t ==> tab
 \r ==> return
 \v ==> vertical tab
 .........
 \<xyz ex:
 \<xyz 字符边缘 \<Linux 表示  `L' 字前不会匹配 其他的字符
 因为 /Linux/ 可以匹配 muLinux
 xyz\>   是 \<xyz 对立面  Linux\> `x'之后没有字匹配,
 因为 /Linux/ 可以匹配 Linuxer
 /\<Linux\>/ 只有匹配Linux
 ipconfig | sed -n "/\<E.*/p"
 ipconfig | sed -n "/.*n\>/p"
 ipconfig | sed -n "/\<IP\>/p"
 
 findstr 是 Unix 的 `grep' 在WindowsXP的 替代,
 使用基本正规表达式, sed 正规表达式比较多 ,
 \{n,m\} ,\(regexp\)  是 findstr 没有的.
 但是无法用gb chinese input, 只能 copy and paste
 加上我功力有限, so, stop here for my post 备注
 
 
 
 
 
 
 
 
 
 
 
 
 |  | 
|  2004-8-2 00:00 |  | 
|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『第 13 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
some addon to \x for findstr, already remember\x  逃脱字符特殊的意义
 \$ 只有匹配 $
 sed "/^\$.*/!d" 含意行的开始是 $,(字面意义,不是行的终点) !d ==> not delete
 
 
 
 
 
 
 
 
 
 |  | 
|  2004-8-3 00:00 |  | 
|  | 
 
| twf_cc 初级用户
 
   
 
 
 积分 262
 发帖 50
 注册 2004-7-10
 状态 离线
 | 
| 『第 14 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
and some common regexp/^$/ ==> 空行
 *\.**\.**\.** ==> web site 地址
 /<*>*/ ==> html tags
 .* 零个or 更多的任何字符
 ......
 
 few example , regexp 是许多的 programming language 的基本语法,也许
 增加许多的伸展, 但方法没有改变, like awk , perl...etc
 多了 ? , + 的 方法, learning it is the first step for learning programming language
 
 
 
 
 
 
 
 |  | 
|  2004-8-3 00:00 |  | 
|  | 
 
| Climbing 铂金会员
 
        网络独行侠
 
 
 积分 6962
 发帖 2753
 注册 2003-4-16
 来自 河北保定
 状态 离线
 | 
| 『第 15 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
前面你讲的基本上是BRE(或者包含部分ERE)的用法,我对正则表达式基本上已经明白是什么意思了,这个不用多解释,正则表达式复杂就复杂在那些元字符及匹配模式上,搞清楚了就很简单(只是比较难以阅读罢了)。前面有一个网友提出一个问题,就是将一个目录下的所有文件名改名去掉第一个字符,这应该可以用sed来实现,不知道楼主可不可以给出一个用sed的解决办法(我已经用lmod解决了)。 
 
 
 
 
 |  
                  |  偶只喜欢回答那些标题和描述都很清晰的帖子!
 如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
 
 |  | 
|  2004-8-3 00:00 |  |