我正在使用谷歌英语1gram数据集link here,它看起来如下:
C'ape 1804 1 1
C'ape 1821 1 1
C'ape 1826 1 1
C'ape 1838 2 2
C'ape 1844 1 1
C'ape 1869 1 1
C'ape 1874 1 1
C'ape 1878 2 2
C'ape 1879 1 1
C'ape 1880 1 1
CABMEL 1873 1 1
CABMEL 1874 1 1
CABMEL 1875 1 1
CABMEL 1879 1 1
CABMEL 1884 1 1
CABMEL 1890 1 1
CABMEL 1899 1 1
CABMEL 1901 1 1
CABMEL 1903 3 2
CABMEL 1910 2 2
CABMEL 1912 1 1
CABMEL 1915 1 1
CABMEL 1926 2 2
CABMEL 1927 3 2
CABMEL 1928 4 2
CABMEL 1930 2 2
至少4列,有些行也包含5.第一列是1-gram,一个字符串,我想只提取那些在第一列中只包含字母的字符串的行(大写或小写仅限字母)。我在想grep应该这样做,但我找不到正确的正则表达式来完成这项工作。任何可以轻松完成工作的unix实用程序? 我相信列是制表符分隔的。
编辑:输出将仅包含带有CABMEL的行
答案 0 :(得分:3)
grep -iE '^[a-z]+\s' file
应该这样做。现在使用\s
来匹配空格(文件使用制表符作为分隔符)。
答案 1 :(得分:3)
使用Perl:
# Match all lines that start with a-z or A-Z and are followed by a space
perl -ne 'print if m/^[a-z]+\s/i' file
使用awk:
# Match first field's that only contain a-z or A-Z
awk '$1 ~ /^[a-zA-Z]+$/' file
两者都会输出:
CABMEL 1873 1 1
CABMEL 1874 1 1
CABMEL 1875 1 1
CABMEL 1879 1 1
CABMEL 1884 1 1
CABMEL 1890 1 1
CABMEL 1899 1 1
CABMEL 1901 1 1
CABMEL 1903 3 2
CABMEL 1910 2 2
CABMEL 1912 1 1
CABMEL 1915 1 1
CABMEL 1926 2 2
CABMEL 1927 3 2
CABMEL 1928 4 2
CABMEL 1930 2 2