小编jes*_*e_b的帖子

使用 bash [[ 命令的 =~ 运算符进行正则表达式匹配的问题

在 OSX 上,我正在构建一个函数来验证日期格式,然后将它们转换为纪元时间。该函数应验证日期是否为以下格式之一,如果不是错误: 01/01/1970 10:00PM或10:00PM(%m/%d/%Y %I:%M%p或%I:%M%p)

功能

checkTIME () {
    local CONVERT_CHK_TIME="$1"
    if [[ "$CONVERT_CHK_TIME" =~ ^(0[0-9]|1[0-2]):[0-9][0-9](AM|PM)$ ]]; then
        CONVERT_TIME="$(date -j -f "%I:%M%p" "$CONVERT_CHK_TIME" "+%s")"
    elif [[ "$CONVERT_CHK_TIME" =~ (0[0-9]|1[0-2])\/([0-2][0-9]|3[0-1])\/\d{4}\s[0-9][0-9]:[0-9][0-9](AM|PM) ]]; then
        CONVERT_TIME="$(date -j -f "%m/%d/%Y %I:%M%p" "$CONVERT_CHK_TIME" "+%s")"
    else
        echo "ERROR!"
        exit 1
    fi
}
Run Code Online (Sandbox Code Playgroud)

它目前工作正常,10:00PM但在我尝试时无法匹配01/10/2017 10:00PM

我这样称呼它:

./convert '01/10/2017 10:00PM'
...
...
+ [[ -n 01/10/2017 10:00PM ]]
+ checkTIME '01/10/2017 10:00PM'
+ local 'CONVERT_CHK_TIME=01/10/2017 10:00PM'
+ [[ …
Run Code Online (Sandbox Code Playgroud)

osx bash date regular-expression

5
推荐指数
2
解决办法
3215
查看次数

在 Ubuntu 中合并两个硬盘

我的电脑上安装了 2 个硬盘。其中一个是空的(我刚刚添加了它),另一个包含其他所有内容。

fdisk 的输出:

root@*****:~# sudo fdisk -l  
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors   
Units: sectors of 1 * 512 = 512 bytes   
Sector size (logical/physical): 512 bytes / 512 bytes    
I/O size (minimum/optimal): 512 bytes / 512 bytes    
Disklabel type: dos   
Disk identifier: *****   

Device     Boot Start     End   Sectors  Size Id Type  
/dev/sda1  *     2048 209715166 209713119  100G 83 Linux


Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors  
Units: sectors of 1 * 512 = 512 …
Run Code Online (Sandbox Code Playgroud)

partition

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

Shell脚本中的调用函数

我在 shell 中编写了一个简单的函数,它根据某些条件返回 0 或 1。让我称该函数名称为 foo

foo(){

...

...

}
Run Code Online (Sandbox Code Playgroud)

现在我试图在 if 条件下调用 foo 如下:-

if ( foo $1 )

...

..
Run Code Online (Sandbox Code Playgroud)

它工作正常。但是当我使用跟随方法调用时,我得到错误

if [ foo $1 ]

...

...
Run Code Online (Sandbox Code Playgroud)

为什么它会以“一元运算符预期”的形式抛出错误?

shell-script function test

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

如何使用箭头键在 Ubuntu 终端中滚动

我在终端中得到一些标准输出并尝试使用箭头键向上滚动,但它给了我以前的命令。

向上翻页和向下翻页什么都不做。

使用滚动条极其困难,因为它每微英寸移动一页。请告诉我有一种方法可以在 Ubuntu 终端上使用箭头键(或类似的东西)进行合理的滚动?

我在滚动首选项中看不到任何内容。

ubuntu terminal scrolling

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

如果匹配,则提取多行

我有一个命令可以输出有关块中所有 DIMM 插槽的信息,如下所示:

ID    SIZE TYPE
44    105  SMB_TYPE_MEMDEVICE (type 17) (memory device)

  Manufacturer: NO DIMM
  Serial Number: NO DIMM
  Asset Tag: NO DIMM
  Location Tag: P1-DIMMD1
  Part Number: NO DIMM

  Physical Memory Array: 43
  Memory Error Data: Not Supported
  Total Width: 0 bits
  Data Width: 0 bits
  Size: Not Populated
  Form Factor: 9 (DIMM)
  Set: None
  Rank: Unknown
  Memory Type: 2 (unknown)
  Flags: 0x4
        SMB_MDF_UNKNOWN (unknown)
  Speed: Unknown
  Configured Speed: Unknown
  Device Locator: P1-DIMMD1
  Bank Locator: P0_Node1_Channel0_Dimm0
  Minimum Voltage: …
Run Code Online (Sandbox Code Playgroud)

awk text-processing

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

替换文件中引号之间的数据

我想从分隔符为逗号的数据文件中提取“”之间的数据。

输入文件示例:

,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10,000",8/13/2019,
Run Code Online (Sandbox Code Playgroud)

预期产量:

,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10000",8/13/2019,
Run Code Online (Sandbox Code Playgroud)

sed awk text-processing

5
推荐指数
2
解决办法
1551
查看次数

如何在关机期间写入控制台?

我试图阻止用户在不从机器上物理移除闪存卡的情况下关闭或重新启动。为此,我编写了一个 SystemD 服务,removeflash.service:

[Unit]
Description=Prompt user to remove flash card

[Service]
ExecStop=/usr/lib/systemd/flashshutdown.sh
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Requires=rsyslog.service
Run Code Online (Sandbox Code Playgroud)

flashshutdown.sh是一个bash脚本,如下:

#! /bin/bash
#
while [ -e /dev/flash ] ; do
    echo "Please remove flash card"
    logger "GHB: Please remove flash card"
    sleep 5
done
Run Code Online (Sandbox Code Playgroud)

我没想到 echo 在关闭时会做任何事情,而且它没有。但是,我希望 logger 命令能够工作。没有Requires=rsyslog.service,我的服务在rsyslog.service关闭后就退出了;我插入了防止这种情况发生的要求,但唯一的区别是,removeflash.service 的关闭在关闭顺序中较早。幸运的是,systemd 本身向控制台输出一条消息,表明它正在运行提示用户删除闪存卡的作业,这一事实挽救了该服务的目的。

向控制台发出消息的正确方法是什么?

shutdown systemd console

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

为什么 awk 的 system() 调用会这样?

我正在尝试使用 system() 在 awk 中执行 grep ,根据手册应该返回正在运行的命令的退出代码。

$ cat foo.txt
bar
$ grep -q bar foo.txt; echo $?
0
$ awk 'BEGIN{ if ( system( "grep -q bar foo.txt" ) ) { print "yes" } else { print "no" } }'
no
Run Code Online (Sandbox Code Playgroud)

如果我删除-q我可以看到 grep 确实找到了bar所以它应该退出 0 并因此打印是,否?

$ awk 'BEGIN{ if ( system( "grep bar foo.txt" ) ) { print "yes" } else { print "no" } }'
bar
no
Run Code Online (Sandbox Code Playgroud)

grep从等式中完全去除:

$ awk 'BEGIN{ if …
Run Code Online (Sandbox Code Playgroud)

awk gawk

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

什么决定了 smf 服务维护模式?

我有 smartos 机器将自定义应用程序作为 smf 服务(一个 circonus 监控代理)运行。在其中一些机器上,代理在启动时出错并卡在重启循环中,最终导致机器崩溃。对于我使用过的所有其他 smf 服务,它们将在重新启动几次后进入“维护”模式,但此特定服务似乎从未如此。我在 smf 清单中看不到任何调整这些设置的方法,我在 oracle 文档中也没有找到太多关于它的信息。有谁知道这是否是可配置的设置,如果是,我在哪里可以找到它?

SMF 清单定义了以下重启方法:

<exec_method name='restart' type='method' exec=':kill -HUP' timeout_seconds='10'/>
Run Code Online (Sandbox Code Playgroud)

opensolaris smf illumos

5
推荐指数
0
解决办法
70
查看次数

我可以使用比较运算符吗?

我正在构建一个函数,该函数将计算给定安培数、距离(以英尺为单位)和允许电压降所需的电线规格。

给定这些值,我可以计算出“圆形密耳”,从而得到AWG 要求。我开始构建一个大型if elif声明来将圆形密耳与其受人尊敬的仪表进行比较,但我相信这case是正确的工具。

我还没有找到任何用于比较数字的案例示例,所以我想知道是否可以执行以下操作:

what.gauge () {

    let cmils=11*2*$1*$2/$3
    let amils=17*2*$1*$2/$3


    case $cmils in

        320-403)
            cawg="25 AWG"
            ;;
        404-509)
            cawg="24 AWG"
            ;;
        510-641)
            cawg="23 AWG"
            ;;

        etc...

}
Run Code Online (Sandbox Code Playgroud)

bash case

4
推荐指数
3
解决办法
3451
查看次数