小编jay*_*ngh的帖子

如何阅读带有特殊字符的电子邮件

我的收件箱中有大量的电子邮件(主要是垃圾邮件),我有一个PHP脚本,可以读取所有这些电子邮件的电子邮件并将它们放在不同的文件夹中(我有一个使用imap php函数的自定义php电子邮件阅读器).

我的问题是:

一些电子邮件中有奇怪的字符,这里有一个示例:
搜索引擎营销将通过全面的在线营销活动增加您公司的在线存在

我可以&acirc;毫无问题地转换它,但是你可以看到我有<80><99>字符,我怎么能转换它们呢?

email bash special-characters

8
推荐指数
1
解决办法
122
查看次数

在awk中打​​印长整数

我有一个管道分隔的feed文件,它有几个字段.由于我只需要一些,我想用它awk来捕获它们用于我的测试目的.但是,我注意到printf如果我使用它会更改值"%d".如果我使用,它工作正常"%s".

Feed文件示例:

[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"无法处理长整数的限制.如果是这样的话,为什么会在数字中加一个而不是截断呢?

我试过这个BSDGNU版本的awk. …

printing awk printf gawk

8
推荐指数
2
解决办法
1万
查看次数

与grep的非贪婪匹配

据我所知,非贪心匹配不是基本正则表达式(BRE)和扩展正则表达式(ERE)的一部分.然而,不同版本grep(BSD和GNU)的行为似乎表明其他方面.

例如,我们来看下面的例子.我有一个字符串说:

string="hello_my_dear_polo"
Run Code Online (Sandbox Code Playgroud)

使用GNU 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,因此不需要转义.

使用BSD 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)

regex grep bsd gnu

8
推荐指数
1
解决办法
1354
查看次数

如何编写shell脚本以删除错误目录中的解压缩文件?

我不小心将文件解压缩到一个错误的目录,实际上有数百个文件...现在该目录与原始文件和错误的解压缩文件混乱.我想选择解压缩的文件并使用shell脚本删除它们,例如

$unzip foo.zip -d test_dir
$cd target_dir
$ls test_dir | rm -rf
Run Code Online (Sandbox Code Playgroud)

什么都没发生,没有文件被删除,我的命令出了什么问题?谢谢 !

shell

6
推荐指数
1
解决办法
988
查看次数

复制包含在不同父文件夹中的许多文件(同名)

大家好我对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脚本?

谢谢!

unix bash copy file

5
推荐指数
1
解决办法
2047
查看次数

bash 管道中当前变量的名称

在 powershell 中$_是通过管道传递的当前变量的名称。Bash 中与此等效的是什么?

假设我想这样做

echo "Hi" | echo "$_"
   prints Hi
Run Code Online (Sandbox Code Playgroud)

谢谢

bash powershell pipeline

5
推荐指数
1
解决办法
3451
查看次数

在 shell 脚本中获取 2 个数组中的公共值

我有一个

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)

按升序排列。

unix sorting bash shell awk

5
推荐指数
1
解决办法
4427
查看次数

将bash stderr发送到logfile,但仅在存在错误时发送

我使用以下代码将stderr发送到文件.

.script >2 "errorlog.$(date)"
Run Code Online (Sandbox Code Playgroud)

问题是每次运行脚本时都会创建一个空白日志文件,即使错误不存在也是如此.我也在网上和几本书中看过,并且只有在存在错误时才能弄清楚如何创建日志文件.

bash stderr

5
推荐指数
1
解决办法
1524
查看次数

Bash脚本删除每一行的点尾

Unix命令删除文件中每行末尾的点.

样本rec在文件中

11234567                 0.
23456789              5569.
34567810                 1.
10162056                 0.
Run Code Online (Sandbox Code Playgroud)

bash

5
推荐指数
1
解决办法
5272
查看次数

计算管道分隔文件中的列数

我有一个管道|分隔文件.

文件:

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"作为两个不同的字段而不是一个字段

linux shell perl awk

4
推荐指数
2
解决办法
2万
查看次数

标签 统计

bash ×6

awk ×3

shell ×3

unix ×2

bsd ×1

copy ×1

email ×1

file ×1

gawk ×1

gnu ×1

grep ×1

linux ×1

perl ×1

pipeline ×1

powershell ×1

printf ×1

printing ×1

regex ×1

sorting ×1

special-characters ×1

stderr ×1