2017-09-04 101 views
0

我在这个curl脚本编写方面相当新颖,我正在寻找一种方法,当我点击特定网站时,可以像令牌一样粘贴文本。Curl - 使用grep打印值

目前我有:

echo $a_opensite | grep -E -o 'value=\".*==.*' | awk '{print $1}' > 
        /Users/MZComputer/Downloads/10Step/VIEWSTATE_file; 

这在一个名为文件中写入以下值:

VIEWSTATE_file****value="bdC7M0jCKxJNSfHjUVv+4MMt3/ysSLviYkIQnnpntK3qNCarg7H012UIllu+XBDepbWYWktNdf3EBgd3xd0...UVv"**** 

但文字value="就是我能够使用以获得正确的令牌。但是,我不想在文件中包含value="....",只是想在引号内包含文本 - 不包括引号本身。

任何想法如何实现?

回答

1

使用以下命令行:

echo $a_opensite | grep -E -o 'value=\".==.' | awk '{print $1}' | sed 's/value="\([^"]*\)"/\1/' > /Users/MZComputer/Downloads/10Step/VIEWSTATE_file; 
0

假设的GNU grep我会使用它-P选项和Perl式的回顾后/超前表达式。例如:

$ echo 'foo value="something interesting" bar' | grep -Po '(?<=value=\").*?(?=\")' 
something interesting 

有趣位是:

  1. (?=\") - 这是一个先行表达。它匹配空字符串,如果它后跟指定的正则表达式,在本例中为\"。在上面的例子中,它将匹配在提供的输入末尾" bar之前的空字符串。
  2. (?<=value=\") - 这是一个后视的表达。它匹配空字符串,如果它前面有指定的正则表达式,在本例中为value=\"在上例中,它将匹配something interesting之前的空字符串。
  3. .*?匹配字符非贪婪的任何序列,这是说,如果行读取value="stuff" garbage="more stuff"这将只匹配stuff,而不是stuff" garbage="more stuff

-o选项相结合,这将隔离value="和下"之间的字符串。