【问题标题】:sed - why '^[-\s]$' does not match empty linessed - 为什么 '^[-\s]$' 不匹配空行
【发布时间】:2021-12-04 15:13:03
【问题描述】:

目标

尝试通过在 From 文件上应用 sed 来创建 To 文件,删除:

  1. 从第一行到空行
  2. 空行

来自文件

Description:           Master Index of EDGAR Dissemination Feed
Last Data Received:    September 30, 2006
Comments:              webmaster@sec.gov
Anonymous FTP:         ftp://ftp.sec.gov/edgar/
Cloud HTTP:            https://www.sec.gov/Archives/

 
 
 
CIK|Company Name|Form Type|Date Filed|Filename
--------------------------------------------------------------------------------
1000045|NICHOLAS FINANCIAL INC|10-Q|2006-08-14|edgar/data/1000045/0001193125-06-172516.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2006-07-27|edgar/data/1000045/0001193125-06-154794.txt
1000069|TEXAS CAPITAL VALUE FUNDS INC|497|2006-09-12|edgar/data/1000069/0001000069-06-000017.txt

归档

CIK|Company Name|Form Type|Date Filed|Filename
1000045|NICHOLAS FINANCIAL INC|10-Q|2006-08-14|edgar/data/1000045/0001193125-06-172516.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2006-07-27|edgar/data/1000045/0001193125-06-154794.txt
1000069|TEXAS CAPITAL VALUE FUNDS INC|497|2006-09-12|edgar/data/1000069/0001000069-06-000017.txt

问题

^[-\s]*$ 与空行不匹配。

$ cat master.csv | sed -e '1,/^$/d; /^[-\s]*$/d'
 
 
 
CIK|Company Name|Form Type|Date Filed|Filename
1000045|NICHOLAS FINANCIAL INC|10-Q|2006-08-14|edgar/data/1000045/0001193125-06-172516.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2006-07-27|edgar/data/1000045/0001193125-06-154794.txt
1000069|TEXAS CAPITAL VALUE FUNDS INC|497|2006-09-12|edgar/data/1000069/0001000069-06-000017.txt

但是,^[- \t]*$ 确实匹配。

$ cat master.csv | sed -e '1,/^$/d; /^[- \t]*$/d'
CIK|Company Name|Form Type|Date Filed|Filename
1000045|NICHOLAS FINANCIAL INC|10-Q|2006-08-14|edgar/data/1000045/0001193125-06-172516.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2006-07-27|edgar/data/1000045/0001193125-06-154794.txt
1000069|TEXAS CAPITAL VALUE FUNDS INC|497|2006-09-12|edgar/data/1000069/0001000069-06-000017.txt

问题

请说明原因。据我了解[ \t][\s] 相同,因此不知道为什么。

【问题讨论】:

  • \s 在 sed 正则表达式中并不特殊。
  • 如果要删除空行或仅包含空格的行,请使用/^[[:space:]]*$/d

标签: unix sed


【解决方案1】:

正则表达式列表块中特殊字符的基础知识。 \ 在正则表达式列表[] 中并不特殊,除了\t\n

[\s][s] 相同。其他特殊字符需要使用 POSIX 字符类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多