我正在处理一个bash脚本,我想并排打印两个文件.一个文件填充IPv4地址,另一个文件填充IPv6地址.我试过了,
pr -mtw $WIDTH $FILE1 $FILE2
Run Code Online (Sandbox Code Playgroud)
但它削减了产量.
??????IPV4?????????????????????????IPV6??????????????????
224.0.0.1 2001:0db8:0000:
192.0.2.128 ff02::1
192.0.2.128 2001:0db8:0000:
192.0.2.128 ::
2001:0db8:0000:
2001:db8:0:0:0:
2001:db8::ff00:
0000:0000:0000:
::1
fe80::
::ffff:192.0.2.
::192.0.2.128
Run Code Online (Sandbox Code Playgroud)
我也试过了,
paste $FILE1 $FILE2 | awk '$1=$1' OFS='\t '
Run Code Online (Sandbox Code Playgroud)
而输出是,
??????IPV4?????????????????????????IPV6??????????????????
224.0.0.1 2001:0db8:0000:0042:0000:8a2e:0370:7334
192.0.2.128 ff02::1
192.0.2.128 2001:0db8:0000:0000:0000:ff00:0042:8329
192.0.2.128 ::
2001:0db8:0000:0000:0000:ff00:0042:8329
2001:db8:0:0:0:ff00:42:8329
2001:db8::ff00:42:8329
0000:0000:0000:0000:0000:0000:0000:0001
::1
fe80::
::ffff:192.0.2.128
::192.0.2.128
Run Code Online (Sandbox Code Playgroud)
我希望输出是这样的,
??????IPV4?????????????????????????IPV6??????????????????
224.0.0.1 2001:0db8:0000:0042:0000:8a2e:0370:7334
192.0.2.128 ff02::1
192.0.2.128 2001:0db8:0000:0000:0000:ff00:0042:8329
192.0.2.128 ::
2001:0db8:0000:0000:0000:ff00:0042:8329
2001:db8:0:0:0:ff00:42:8329
2001:db8::ff00:42:8329
0000:0000:0000:0000:0000:0000:0000:0001
::1
fe80::
::ffff:192.0.2.128
::192.0.2.128
Run Code Online (Sandbox Code Playgroud)
FILE1:
224.0.0.1
192.0.2.128
192.0.2.128
192.0.2.128
Run Code Online (Sandbox Code Playgroud)
FILE2:
2001:0db8:0000:0042:0000:8a2e:0370:7334
ff02::1
2001:0db8:0000:0000:0000:ff00:0042:8329
::
2001:0db8:0000:0000:0000:ff00:0042:8329 …Run Code Online (Sandbox Code Playgroud) 当我尝试使用sed在OSX中插入新行时,我收到以下错误
在命令结尾处\后的额外字符
当前文件内容是
{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
Run Code Online (Sandbox Code Playgroud)
预期的内容是
{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的命令是
sed -i '' "/localhost/a\ 'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'web']," FILENAME
Run Code Online (Sandbox Code Playgroud) 我用followin代码创建了restart.sh
#!/bin/bash
ps -aux | grep sidekiq > /dev/null
if [ $? -eq 0 ]; then
echo "Process is running."
else
echo "Process is not running."
fi
Run Code Online (Sandbox Code Playgroud)
检查sidekiq进程是否正在运行.我将把这个脚本放在cron中每天运行,所以如果sidekiq没有运行,它将自动启动.
我的问题是,与
ps -aux | grep sidekiq
Run Code Online (Sandbox Code Playgroud)
即使进程没有运行,它也会显示出来
myname 27906 0.0 0.0 10432 668 pts/0 S+ 22:48 0:00 grep --color=auto sidekiq
Run Code Online (Sandbox Code Playgroud)
而不是没有.这在grep中计算,因此即使进程未运行,它也会显示为"sidekiq"进程正在运行.怎么不算这个结果?我相信我必须使用awk,但我不知道如何在这里使用它来更好地过滤.
给定目录结构:
/Users/doge/very/amaze.js
/usr/local/bin/wow
/node_modules/
/css/
/css/somefile.css
/lib/
/somelib/
/anotherlib/somedir/finallib.js
/index.html
/somefile.test
/somelib/file.html
/firstdir/seconddir/file.css
/node_modules.txt
Run Code Online (Sandbox Code Playgroud)
如何使用 extglob 只排除 node_modules 目录?
/!(node_modules)
Run Code Online (Sandbox Code Playgroud)
上面的内容匹配根级别的所有内容,除了 node_modules 目录和文本文件(我们想要包含)之外。它也不会递归地遵循匹配目录。
/!(node_modules)/**
Run Code Online (Sandbox Code Playgroud)
这个更接近,但它也排除了根目录中的所有文件。即使它包含根级别的文件,我猜它也会排除 node_modules.txt 文件。
证明这一点的一个非常简单的方法是运行
mkfifo /tmp/a
read -t 1 a < /tmp/a
Run Code Online (Sandbox Code Playgroud)
阅读永远不会返回。
Bash 手册说:此选项仅在 read 从终端、管道或其他特殊文件读取输入时有效;从常规文件读取时无效
但是 /tmp/a 是一个管道, ls 的输出是
ls -l /tmp/a
prw-r--r-- 1 root root 0 Feb 4 22:18 /tmp/a
Run Code Online (Sandbox Code Playgroud)
bash 版本是:
GNU bash,版本 4.3.46(1)-release (x86_64-pc-linux-gnu) 版权所有 (C) 2013 Free Software Foundation, Inc.
操作系统是:
Ubuntu 16.04.1 LTS
Run Code Online (Sandbox Code Playgroud) ~ ls
A B C
Run Code Online (Sandbox Code Playgroud)
猛击(看起来不对)
~IFS=$'\x00' read -a vars < <(find -type f -print0); echo "${vars}"
ABC
Run Code Online (Sandbox Code Playgroud)
在zsh上(看起来不错)
~IFS=$'\x00' read -A vars < <(find -type f -print0); echo "${vars}"
A B C
Run Code Online (Sandbox Code Playgroud)
它是bash的错误吗?
我收到错误:
An error has occurred: Invalid Lambda Response: Received error response from Lambda: Handled.
Run Code Online (Sandbox Code Playgroud)
从我的lambda函数的lex中,我正在尝试https://github.com/awslabs/amz-ai-building-better-bots中的代码,
当尝试使用test事件时,Lambda函数将返回下面的预期输出,指示lex引发下一个插槽,但是lex抛出上述错误。
Lambda测试输出:
{
"sessionAttributes": {},
"dialogAction": {
"type": "ElicitSlot",
"intentName": "cafeOrderBeverageIntent",
"slots": {
"BeverageType": "mocha",
"BeverageStrength": null,
"Creamer": null,
"BeverageSize": null,
"BeverageTemp": null,
"BeverageExtras": null
},
"slotToElicit": "BeverageSize"
}
}
Run Code Online (Sandbox Code Playgroud)
查看lex开发人员指南,该响应具有输出格式的所有预期字段,
是否也应将“ fulfillmentState”与dialogaction elicitslot一起发送?目前尚未发送。
测试事件输入:
{
"messageVersion": "1.0",
"invocationSource": "DialogCodeHook",
"userId": "test-1",
"sessionAttributes": {},
"bot": {
"name": "CoffeeBot",
"alias": null,
"version": "$LATEST"
},
"outputDialogMode": "Text",
"currentIntent": {
"name": "cafeOrderBeverageIntent",
"slots": {
"BeverageType": "mocha", …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Bash或Python中的模式之间对线进行排序。我想基于第二个字段以“,”作为分隔符对行进行排序。
给定以下文本输入文件:
Sample1
T1,64,0.65 MEDIUM
T2,60,0.45 LOW
T3,301,0.68 MEDIUM
T4,65,0.75 HIGH
T5,59,0.72 MEDIUM
T6,51,0.82 HIGH
Sample2
T1,153,0.77 HIGH
T2,152,0.61 MEDIUM
T3,154,0.67 MEDIUM
T4,283,0.66 MEDIUM
T5,161,0.65 MEDIUM
Sample3
T1,147,0.71 MEDIUM
T2,154,0.63 MEDIUM
T3,45,0.63 MEDIUM
T4,259,0.77 HIGH
Run Code Online (Sandbox Code Playgroud)
我期望作为输出:
Sample1
T6,51,0.82 HIGH
T5,59,0.72 MEDIUM
T2,60,0.45 LOW
T1,64,0.65 MEDIUM
T4,65,0.75 HIGH
T3,301,0.68 MEDIUM
Sample2
T2,152,0.61 MEDIUM
T1,153,0.77 HIGH
T3,154,0.67 MEDIUM
T5,161,0.65 MEDIUM
T4,283,0.66 MEDIUM
Sample3
T3,45,0.63 MEDIUM
T1,147,0.71 MEDIUM
T2,154,0.63 MEDIUM
T4,259,0.77 HIGH
Run Code Online (Sandbox Code Playgroud)
我试图通过另一篇文章中的glenn jackman来适应这个建议,但据我测试,它仅适用于2种模式:
> gawk -v cmd="sort -k2" p=1 '
> /^PATTERN2/ …Run Code Online (Sandbox Code Playgroud) 我正在尝试过滤一个大 txt 文件(大约 10GB)的行,该文件只在direction列等于时才被呼叫号码的前缀2.
这是我从管道获取的文件格式(来自不同的脚本)
caller_number=34234234324, clear_number=982545345435, direction=1, ...
caller_number=83479234234, clear_number=348347384533, direction=2, ...
Run Code Online (Sandbox Code Playgroud)
因为这只是一个示例数据,但实际文件包含许多其他列,但我只想过滤clear_number基于direction所以这就足够了。
我想删除不包含前缀列表的行,因此例如在这里我将使用 grep 执行以下操作:
grep -vP 'clear_number=(?!(2207891|22034418|22074450|220201677|220240574|220272183|220722988|220723276|220751152|220774457|220794227|220799141|2202000425|2202000939|2202000967)).*direction=2'
Run Code Online (Sandbox Code Playgroud)
这很好用。唯一的问题是我得到的前缀数量有时约为 10K-50K,这是很多前缀,如果我尝试使用grep
get来做到这一点grep: regular expression is too large。
任何想法如何使用 Bash 命令解决它?
更新
例如..假设我有以下内容:
caller_number=34234234324, clear_number=982545345435, direction=1
caller_number=83479234234, clear_number=348347384533, direction=2
caller_number=2342334324, clear_number=5555345435, direction=1
caller_number=034082394234324, clear_number=33335345435, direction=1
caller_number=83479234234, clear_number=348347384533, direction=2
caller_number=83479234234, clear_number=444447384533, direction=2
caller_number=83479234234, clear_number=64237384533, direction=2
Run Code Online (Sandbox Code Playgroud)
我的list.txt包含:
642
3333
534234235
Run Code Online (Sandbox Code Playgroud)
所以它只会返回该行
caller_number=83479234234, clear_number=64237384533, direction=2
Run Code Online (Sandbox Code Playgroud)
因为清晰的数字以642and direction=开头2 …
我遇到以下问题:我试图取消注释我确定使用的特定行:
LINESTART=$(grep -nr "matching string" test.conf | cut -d : -f1)
Run Code Online (Sandbox Code Playgroud)
之后我需要取消注释该代码$LINESTART部分$((LINE+10))
LINEEND=$((LINE+10))
Run Code Online (Sandbox Code Playgroud)
我尝试了以下 sed 语法:
sed -i '${LINESTART},${LINEEND} s/# *//' test.conf
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
sed: -e expression #1, char 4: extra characters after command
Run Code Online (Sandbox Code Playgroud)
示例 test.conf:
84 #server {
85 # listen 8000;
86 # listen somename:8080;
87 # server_name somename alias another.alias;
88
89 # location / {
90 # root html;
91 # index index.php index.html index.htm;
92 # }
93 #}
Run Code Online (Sandbox Code Playgroud)