小编Evg*_*sky的帖子

"tail -f | iconv -fsjis" 不输出任何内容

我想要tail -f一个文件,但它的内容是sjis编码的,所以我需要将它转换为我的终端的本机 (utf-8) 编码。

当我做

尾-fx | iconv -fsjis

不会有输出。作为

尾巴 x | iconv -fsjis

确实有效,起初我认为这是一个缓冲问题,但尝试unbufferstdbuf按照关闭管道中的缓冲没有帮助。

实际上,即使在 x 中添加了 10k 以上的数据,也不会有输出,所以我想这不是缓冲问题(缓冲区是 4k,如果我没记错的话),但是 iconv 只会在它收到一个EOF。

那么我怎样才能跟随我的 sjis 编码文件呢?

tail buffer

15
推荐指数
1
解决办法
3289
查看次数

Debian 更新后 TrackPoint 难以控制

我正在进行 debian 测试,并且在重新启动后(在 3 周左右的正常运行时间后,其中包括一堆软件包更新,我相信包括内核)前几天,微调 - 高尔夫球手会称之为推杆 -鼠标指针位置变得非常困难,感觉指针仍在移动,尽管轨迹点已经回到其中心位置。使用轨迹点不再有趣,只需几秒钟即可选择一堆单词。

我不认为这只是一个轨迹点性能配置设置。它可能是某个阈值或某个聪明算法的停用(或一个想要的聪明算法的激活)来增强跟踪点的可用性。

这是一个 IBM/Lenovo 外置 USB 键盘(它不是 ThinkPad 笔记本电脑,尽管我将这个问题标记为“thinkpad”,因为还没有“trackpoint”标签,而且我目前的声誉不允许创建标签)。

我的 xinput 版本:

$ xinput --version
xinput version 1.6.0
XI version on server: 2.2
Run Code Online (Sandbox Code Playgroud)

这里是设备的道具:

$ xinput list-props 10
Device 'Synaptics Inc. Composite TouchPad / TrackPoint':
        Device Enabled (125):   0
        Coordinate Transformation Matrix (127): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (247):     1
        Device Accel Constant Deceleration (248):       2.500000
        Device Accel Adaptive Deceleration (249):       1.000000
        Device Accel Velocity Scaling …
Run Code Online (Sandbox Code Playgroud)

debian thinkpad xinput

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

awk 脚本中的陷阱 Ctrl-C

我相信Ctrl-C可以被困在 bash 脚本中。是否也可以将其捕获在 awk 脚本中以处理该事件?

例如,对于中止处理,但打印已经处理过的结果,而不是只是默默地退出?

awk shell-script trap

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

稳健地分割包含噪声数据的 csv 文件

假设我有一个包含这些列的 csv 文件:

timestamp,cpu,memory
Run Code Online (Sandbox Code Playgroud)

实际数据形状的一个例子是这个图表:

cpu/mem csv 数据作为图表

以这种方式将数据可视化,人眼很容易分辨出 4 个 CPU 密集型活动中任何一个的开始和结束位置。

什么是一种简单的方法,使用标准的 unix cmd 行工具,理想情况下不诉诸Roctave等,仅“grep”文件的 8 行,这些行表示这 4 个活动的开始和结束,基于“cpu”列?

显然这有点模糊,并且数据中存在噪声,但是任何给我 8 行接近开始/结束的解决方案都值得赞赏。

csv 文件的简短摘录,仅显示了这 4 次活动爆发中的第一次:

10:44:21.310,0,53567488
10:44:22.310,1.56257,53575680
10:44:23.326,0,53854208
10:44:24.325,34.3761,57405440
10:44:25.325,73.43985,61747200
10:44:26.325,3.1251,69459968
10:44:27.325,0,69459968
10:44:28.325,0,69459968
10:44:29.325,65.6271,74756096
10:44:30.325,53.1267,77783040
...
10:50:56.450,35.93865,142700544
10:50:57.450,10.93785,142897152
10:50:58.450,1.56255,142897152
10:50:59.450,0,142897152
10:51:00.450,0,142897152
10:51:01.450,0,142897152
Run Code Online (Sandbox Code Playgroud)

理想情况下,这将导致以下 2 行。

10:44:24.325,34.3761,57405440
10:50:58.450,1.56255,142897152
Run Code Online (Sandbox Code Playgroud)

但是,由于在10:44:26.325和之间的几秒钟内没有 cpu 活动10:44:28.325,我不希望答案那么聪明并且做一些类似于“平滑”数据的事情。因此,如果像上面这样的 csv 片段会产生以下 4 行,那就足够了。

10:44:24.325,34.3761,57405440
10:44:26.325,3.1251,69459968
10:44:29.325,65.6271,74756096
10:50:58.450,1.56255,142897152
Run Code Online (Sandbox Code Playgroud)

command-line grep csv split

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

ss 未显示正在侦听的所有端口

做完a之后ssh -fND 1080 localhost,ssh会监听1080端口,提供SOCKS服务:

box:~$ netstat -ln|grep 1080
tcp        0      0 127.0.0.1:1080          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:1080                :::*                    LISTEN     
box:~$
Run Code Online (Sandbox Code Playgroud)

ss 似乎不这么认为:

box:~$ ss -l|grep 1080
box:~$
Run Code Online (Sandbox Code Playgroud)

那么我如何使用ss来检查 1080 是否正在被监听呢?

关于我的设置的更多信息:

box:~$ uname -a
Linux box 4.3.0-1-amd64 #1 SMP Debian 4.3.3-5 (2016-01-04) x86_64 GNU/Linux

box:~$ ss -v
ss utility, iproute2-ss151103
Run Code Online (Sandbox Code Playgroud)

netstat iproute

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

过滤与某些 ID 匹配的 xml 文档

假设您有一个包含许多 xml 文档的文件,例如

<a>
  <b>
  ...
</a>
in between xml documents there may be plain text log messages
<x>
  ...
</x>

...
Run Code Online (Sandbox Code Playgroud)

我将如何过滤此文件以仅显示给定正则表达式与该 xml 文档的任何一行匹配的那些 xml 文档?我在这里谈论一个简单的文本匹配,所以正则表达式匹配部分可能完全不知道底层格式 - xml。

你可以假设根元素的开始和结束标签总是在它们自己的行上(尽管可能会填充空白),并且它们仅用作根元素,即具有相同名称的标签不会出现在下面根元素。这应该使完成工作成为可能,而不必求助于 xml 感知工具。

grep xml sed awk perl

4
推荐指数
1
解决办法
900
查看次数

可选组从不匹配

以下是我正在努力解决的问题的简化版本。我有这个文件:

1 H 200 OK.Content-Length: 2422 x
2 H 403 Forbidden.z
Run Code Online (Sandbox Code Playgroud)

我尝试让 sed 匹配 HTTP 状态和 - 如果存在 - 内容长度,如下所示:

> sed -nEe 's,^.*H ([ 0-9a-zA-Z]+).*(Content-Length: ([0-9]+))?.*$,\1 \3,p' x
200 OK 
403 Forbidden 
Run Code Online (Sandbox Code Playgroud)

所以可选组永远不会匹配。如果我通过删除问号将其设为非可选,它确实会匹配内容长度,但不会匹配没有问号的行:

> sed -nEe 's,^.*H ([ 0-9a-zA-Z]+).*(Content-Length: ([0-9]+)).*$,\1 \3,p' x
200 OK 2422
Run Code Online (Sandbox Code Playgroud)

我怎样才能让 sed 给出以下输出?

200 OK 2422 
403 Forbidden 
Run Code Online (Sandbox Code Playgroud)

NB 我也尝试了perl,它支持惰性匹配(.*?),但没有成功:

> perl -pe 's,^.*H ([ 0-9a-zA-Z]+).*?(Content-Length: ([0-9]+))?.*?$,\1 \3,' x
200 OK 
403 Forbidden 
Run Code Online (Sandbox Code Playgroud)

sed regular-expression

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