我有一个从 curl 返回的 JSON 数组,如下所示:
[
{
"title": "Some Title",
"tags":"tagA tag-B tagC"
},
{
"title": "Some Title 2",
"tags":"tagA tagC"
},
...
]
Run Code Online (Sandbox Code Playgroud)
我想把它转换成...
[
{
"title": "Some Title",
"tags":["tagA",
"tag-B",
"tagC"]
},
{
"title": "Some Title 2",
"tags":["tagA",
"tagC"]
},
...
]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有:
(map(select(.tags!=null)) | map(.tags | split(" "))) as $tags | $tags
这似乎给了我类似的东西:
[
[
"tagA",
"tag-B",
"tagC"
],
[
"tagA",
"tagC"
]
]
Run Code Online (Sandbox Code Playgroud)
但是我似乎无法将其编织回输出中,该输出将.tags
作为原始对象中的数组提供给我,并具有原始值...
我想知道如何监控我localhost
和 IP 地址之间的 tcp 流量,并将活动保存在文件中。我尝试了 iftop 和 tcptrack,但我无法将活动保存在文件中。这些工具不针对指定的 IP 地址,它们仅监视接口:
iftop -i eth2 -f "dst port 22"
Run Code Online (Sandbox Code Playgroud)
我试图用 IP 地址代替,dst
但它不起作用。这个想法是为了检测任何可疑的流量
感谢帮助
鉴于在 Linux 环境中存在许多用于操作字符串的包(grep、awk、sed 等),我想要一个软件来提取类似 php/preg 的语法中的捕获组。
也许最接近的是,grep -P
但我不明白它是如何工作的。
诸如此类的东西cat file.txt | grep -P '/something="([\w]+)"/i'
似乎不仅仅给我捕获组内的内容。
有人可以为我提供一些工作示例吗?请多多,并解释了一些变体和限制!
编辑:我看到某处用于sed
执行此目的,但我仍然对它的语法有些困惑。
尝试将 json 转换为 csv 时,我通过以下jq
查询收到有关 null 的错误:
printf "[]" | jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
Run Code Online (Sandbox Code Playgroud)
它给出了以下错误,
jq: error (at <stdin>:0): Cannot iterate over null (null)
Run Code Online (Sandbox Code Playgroud)
但如果 json 数组非空并且其中有一个对象,则工作正常:
$ printf '[{"a":1}]' | jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
"a"
1
Run Code Online (Sandbox Code Playgroud)
该 …
有没有办法让终端显示原始转义序列?(例如用于控制颜色的那些)
我遇到了这个 UNIX.SE 问题,想过滤“红色”输出(按颜色过滤命令的输出)
但是,答案中的命令不适用于我的输出(例如git status
“未跟踪的文件”中的红色)。他们确实为那里的例子工作echo -e '\033[00;31mtest\033[00m' | grep --color=none '[[:cntrl:]]'
。过滤grep --color=none '[[:cntrl:]]'
适用于我的输出,但也显示具有其他颜色的文本。
我想我看到的红色一定是与 不同的红色\e[31m
。
有没有办法让终端输出原始转义序列?(这样我就可以使用正确的顺序来过滤我看到的特定红色)
(bash,Ubuntu 18.04)
- 更新 -
为了澄清起见,我的问题是如何显示原始转义序列。
@egmont' 使用script
有效的答案。基本上,我只需要用来script
记录输出并使用上述问题的答案之一来查找红色文本,例如:
script /tmp/a.txt
git status
exit
cat /tmp/a.txt | grep -Eo $'\e\\[31m[^\e]*\e\\[[03]?m'
Run Code Online (Sandbox Code Playgroud)
其他答案/评论也正确指出我的用法git
没有通过管道获得颜色。
user
我按照AskUbuntu 答案中的具体步骤将我的用户名 (Ubuntu 22.04.1) 从某个名称更改为。一切似乎都很好,就像用户名是从头开始创建的一样,只是 bash 的用户提示不使用波形符 ( ~
)。
当我最初启动终端(在 GUI 中或没有 X 服务器)时,bash 提示符~
与以前一样使用。但是一旦我进入cd
某个目录,它就会更改为原始值,如下所示:
user@mybox:~$ cd
user@mybox:/home/user$
Run Code Online (Sandbox Code Playgroud)
如何修复像以前一样使用波形符的提示?
仅供参考,~
仍然正确引用更改后的主文件夹。我没有更改任何地方.bashrc
或其他地方的提示。以下是系统的相关信息:
$ getent passwd "$LOGNAME"
user:x:1000:1000:User:/home/user/:/bin/bash
$ echo "${HOME}"
/home/user/
$ echo "$PS1"
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
Run Code Online (Sandbox Code Playgroud)