使用sed或awk删除"复选框"字符

时间:2017-03-29 01:44:13

标签: bash awk sed

我的脚本有一个可能包含一些奇怪字符的变量:function foo() { return $.when() // resolved promise .then(function() { if (condition) { return somethingReturningPromise().then(doSomethingOnSuccess, function() { return $.when(); // this line may be omitted with jQuery 3+, where error handlers "catch" by default; but don't omit the function wrapper. }); } // else `return undefined` is implicit. }) .then(mainFunctionReturningPromise); // here's your single mention of `mainFunctionReturningPromise`, at the end of the chain. } 。我需要删除它们,但老实说,我甚至不知道从哪里开始匹配这些角色。我无法将它们复制并粘贴到我的脚本中,它们只显示为。如何将这些字符与sed或awk匹配?由于系统可用性,我无法使用perl或php或sed或awk以外的任何东西。

4 个答案:

答案 0 :(得分:4)

首先,在您的特殊字符周围添加一些标记字符串,然后hexdump -C,以便您可以轻松查看它们。然后使用HEX代码编写sed命令。例如:

[STEP 118] # cat file
>>> ✔<<<
[STEP 119] # hexdump -C file
00000000  3e 3e 3e f0 9f 8d bf 20  e2 9c 94 3c 3c 3c 0a     |>>>.... ...<<<.|
                   ^^^^^^^^^^^^^^^^^^^^^^^^
[STEP 120] # sed -e $'s/\xf0\x9f\x8d\xbf\x20\xe2\x9c\x94//g' file # need to use the $'...'
>>><<<
[STEP 121] #

然后在完成所有操作后删除添加的标志字符串。

答案 1 :(得分:1)

试试这个 - (文件包含一些控件M和你在问题中提到的字符,我试图只打印字母数字字符)

$cat f


hello vipin
street1
pin 12345

 ✔
$awk '/[[:alnum:]]/ {print }' f
hello vipin
street1
pin 12345

在SO上保存输入文件后,看起来控件M字符消失了。

答案 2 :(得分:0)

$ cat file
some weird characters:  ✔. I need to remove
second line of some weird characters:  ✔. I need to remove

$ tr -c -d '[:print:][:space:]' < file
some weird characters:  . I need to remove
second line of some weird characters:  . I need to remove

答案 3 :(得分:0)

我最终使用的解决方案只是将脚本的编码更改为UTF-8而不是ASCII。我用记事本++做了这个。然后我可以直接使用角色,而不是转换为十六进制的一些迂回方式(我无论如何都不能做,因为变量是环境变量而不是文件)或其他东西。我也不需要使用awk或sed,因为以下更简单:

cleaned_var=${environmental_variable//" ✔"}