我想从文本文件MODIS_list.txt中提取字符串:
wget https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MOD09GA/2018/062/ -O MODIS_list.txt
然后提取MODIS文件的名称:
less MODIS_list.txt | grep -o -P '(?<=hdf">).*(?<=(MOD09GA.A2018062.h18v04.006)).*(?=</a>)'
作为输出
MOD09GA.A2018062.h18v04.006.2018064030133.hdf
假设我想循环更多文件更改,例如日期或产品。
prod_var=MOD09GA
prod_date=2018062
如何在grep命令中插入这两个变量!??
我尝试使用以下语法,但它不起作用:
less MODIS_list.txt | grep -o -P '(?<=hdf">).*(?<=($prod_var.A$prod_date.h18v04.006)).*(?=</a>)'
答案 0 :(得分:2)
尽管如此,我建议你不要使用怪物正则表达式,而是将你的html文件转换为xml文件,并通过xpath选择选择你想要的节点,如下所示:
tidy -q -f /dev/null -asxml --numeric-entities yes MODIS_list.txt | /usr/bin/xpath -q -e "//a[contains(@href,'$prod_var.A$prod_date.h18v04.006.2018064030133.hdf')]/text()"
答案 1 :(得分:1)
在grepping时,您可以连接常量字符串和变量。
Example:
Dumpy:~ admin$ cat /tmp/file.txt
user is john
user is pol
user is bob
user is mark
user is mike
Dumpy:~ admin$ export usrname='john'
Dumpy:~ admin$ grep --color 'user is '$usrname /tmp/file.txt
user is john
答案 2 :(得分:1)
您要执行的命令是:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div>grab me and drag over the table</div>
<table>
<tr>
<td>11111111111111111111111</td>
</tr>
<tr>
<td>222222222222222222222</td>
</tr>
<tr>
<td>333333333333333333333</td>
</tr>
<tr>
<td>11111111111111111111111</td>
</tr>
<tr>
<td>222222222222222222222</td>
</tr>
<tr>
<td>333333333333333333333</td>
</tr>
</table>
正如wolfrevokcats所说(但你需要知道他们在说什么),你必须将单引号改为双引号。问题是你在字符串 hdf 之后有一个引号,它必须被转义两次:一次用于 shell ,一次用于 grep ,但你又需要知道我在说什么。另一个解决方案可以避免在&#39; hdf&#39;右侧的报价转义问题。是使用&#39;。&#39;如下:
grep -o -P "(?<=hdf\\\">).*(?<=($prod_var.A$prod_date.h18v04.006)).*(?=</a>)" MODIS_list.txt