我的收件箱中有大量的电子邮件(主要是垃圾邮件),我有一个PHP脚本,可以读取所有这些电子邮件的电子邮件并将它们放在不同的文件夹中(我有一个使用imap php函数的自定义php电子邮件阅读器).
我的问题是:
一些电子邮件中有奇怪的字符,这里有一个示例:
搜索引擎营销将通过全面的在线营销活动增加您公司的在线存在
我可以â毫无问题地转换它,但是你可以看到我有<80><99>字符,我怎么能转换它们呢?
我有一个管道分隔的feed文件,它有几个字段.由于我只需要一些,我想用它awk来捕获它们用于我的测试目的.但是,我注意到printf如果我使用它会更改值"%d".如果我使用,它工作正常"%s".
[jaypal:~/Temp] cat temp
302610004125074|19769904399993903|30|15|2012-01-13 17:20:02.346000|2012-01-13 17:20:03.307000|E072AE4B|587244|316|13|GSM|1|SUCC|0|1|255|2|2|0|213|2|0|6|0|0|0|0|0|10|16473840051|30|302610|235|250|0|7|0|0|0|0|0|10|54320058002|906|722310|2|0||0|BELL MOBILITY CELLULAR, INC|BELL MOBILITY CELLULAR, INC|Bell Mobility|AMX ARGENTINA SA.|Claro aka CTI Movil|CAN|ARG|
我有兴趣捕捉second column它是哪个19769904399993903.
[jaypal:~/Temp] awk -F"|" '{printf ("%d\n",$2)}' temp
19769904399993904 # Value is changed
Run Code Online (Sandbox Code Playgroud)
但是,以下两个测试工作正常 -
[jaypal:~/Temp] awk -F"|" '{printf ("%s\n",$2)}' temp
19769904399993903 # Value remains same
[jaypal:~/Temp] awk -F"|" '{print $2}' temp
19769904399993903 # Value remains same
Run Code Online (Sandbox Code Playgroud)
所以这是一个"%d"无法处理长整数的限制.如果是这样的话,为什么会在数字中加一个而不是截断呢?
我试过这个BSD和GNU版本的awk. …
据我所知,非贪心匹配不是基本正则表达式(BRE)和扩展正则表达式(ERE)的一部分.然而,不同版本grep(BSD和GNU)的行为似乎表明其他方面.
例如,我们来看下面的例子.我有一个字符串说:
string="hello_my_dear_polo"
Run Code Online (Sandbox Code Playgroud)
grep:以下是hello从字符串中提取的几次尝试.
BRE尝试:
$ grep -o "hel.*\?o" <<< "$string"
hello_my_dear_polo
Run Code Online (Sandbox Code Playgroud)
输出产生整个字符串,这表明非贪婪量词对BRE不起作用.请注意,我只是逃脱了,?因为*它没有失去意义,也不需要转义.
ERE尝试:
$ grep -oE "hel.*?o" <<< "$string"
hello_my_dear_polo
Run Code Online (Sandbox Code Playgroud)
启用该-E选项也会产生相同的输出,表明非贪婪匹配不是ERE的一部分.由于我们使用ERE,因此不需要转义.
PCRE尝试:
$ grep -oP "hel.*?o" <<< "$string"
hello
Run Code Online (Sandbox Code Playgroud)
启用-PPCRE选项表明非贪婪量词是其中的一部分,因此我们得到了所需的输出hello.由于我们使用PCRE,因此不需要转义.
grep:以下是hello从字符串中提取的几次尝试.
BRE尝试:
$ grep -o "hel.*\?o" <<< "$string"
Run Code Online (Sandbox Code Playgroud)
使用BRE我没有得到BSD的输出grep.
ERE尝试:
$ grep -oE "hel.*?o" <<< "$string"
hello
Run Code Online (Sandbox Code Playgroud)
启用该-E选项后,我很惊讶我能够提取所需的输出.我的问题是我从这次尝试得到的输出.
PCRE尝试:
$ grep …Run Code Online (Sandbox Code Playgroud) 我不小心将文件解压缩到一个错误的目录,实际上有数百个文件...现在该目录与原始文件和错误的解压缩文件混乱.我想选择解压缩的文件并使用shell脚本删除它们,例如
$unzip foo.zip -d test_dir
$cd target_dir
$ls test_dir | rm -rf
Run Code Online (Sandbox Code Playgroud)
什么都没发生,没有文件被删除,我的命令出了什么问题?谢谢 !
大家好我对unix命令行有疑问.我有很多这样的文件:
/f/f1/file.txt
/f/f2/file.txt
/f/f3/file.txt
and so on...
Run Code Online (Sandbox Code Playgroud)
我想将file.txt他们的父文件夹复制到另一个文件夹中,例如:
/g/f1/file.txt
/g/f2/file.txt
/g/f3/file.txt
Run Code Online (Sandbox Code Playgroud)
我无法复制所有内容,folder f因为在每个sub-folder f1, f2, ...我有许多其他文件,我不想复制.
我怎么能用命令行执行此操作?最终使用bash脚本?
谢谢!
在 powershell 中$_是通过管道传递的当前变量的名称。Bash 中与此等效的是什么?
假设我想这样做
echo "Hi" | echo "$_"
prints Hi
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个
array1 = (20,30,40,50)
array2 = (10,20,30,80,100,110,40)
Run Code Online (Sandbox Code Playgroud)
我必须从数组 3 中的这 2 个数组中获取公共值,例如:
array3 = (20,30,40)
Run Code Online (Sandbox Code Playgroud)
按升序排列。
我使用以下代码将stderr发送到文件.
.script >2 "errorlog.$(date)"
Run Code Online (Sandbox Code Playgroud)
问题是每次运行脚本时都会创建一个空白日志文件,即使错误不存在也是如此.我也在网上和几本书中看过,并且只有在存在错误时才能弄清楚如何创建日志文件.
Unix命令删除文件中每行末尾的点.
样本rec在文件中
11234567 0.
23456789 5569.
34567810 1.
10162056 0.
Run Code Online (Sandbox Code Playgroud) 我有一个管道|分隔文件.
文件:
106232145|"medicare"|"medicare,medicaid"|789
Run Code Online (Sandbox Code Playgroud)
我想计算每行中的字段数.我尝试了下面的代码
码:
awk -F '|' '{print NF-1}'
Run Code Online (Sandbox Code Playgroud)
这将结果返回为5而不是4.这是因为awk将"medicare | medicaid"作为两个不同的字段而不是一个字段