AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[sed](server)

Martin Hope
markfree
Asked: 2024-10-21 21:15:57 +0800 CST

格式化和过滤 ibm-mq 队列

  • 5

我需要显示每个 IBM MQ 队列管理器队列及其深度。

我可以使用类似 的命令来执行此操作echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME。输出类似于以下内容:

5724-H72 (C) Copyright IBM Corp. 1994, 2023.
Starting MQSC for queue manager QMNAME.


     1 : DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0)
AMQ8409I: Display Queue details.
   QUEUE(QE.QUEUE.NAME1)          TYPE(QLOCAL)
   CURDEPTH(2)
AMQ8409I: Display Queue details.
   QUEUE(QE.QUEUE.NAME2)          TYPE(QLOCAL)
   CURDEPTH(90)
AMQ8409I: Display Queue details.
   QUEUE(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3)
   TYPE(QLOCAL)                            CURDEPTH(1)
AMQ8409I: Display Queue details.
   QUEUE(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME4)
   TYPE(QLOCAL)                            CURDEPTH(0)
AMQ8409I: Display Queue details.
   QUEUE(QE.QUEUE.NAME5)      TYPE(QLOCAL)
   CURDEPTH(0)
AMQ8409I: Display Queue details.
   QUEUE(QE.QUEUE.NAME.QUEUE.NAME6)
   TYPE(QLOCAL)                            CURDEPTH(0)
AMQ8409I: Display Queue details.
   QUEUE(QE.QUEUE.NAME7)     TYPE(QLOCAL)
   CURDEPTH(0)
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.

请注意,有些队列的名称较大,输出会将“ TYPE”和“ CURDEPTH”字段向右下方移动。


我的目标是将这些队列显示为[TYPE] - [QUEUE.NAME] - [DEPTH]:

QLOCAL - QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3 - 1

因此,我尝试使用sed或awk来实现这一点,以下是我的一些尝试:

和awk

awk -F'(QUEUE|TYPE|CURDEPTH)' '/QUEUE\(.*\)/{printf "%s - %s - ", $2, $3}/CURDEPTH/{printf "%s\n", $2}'

$ echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME | cat teste | awk -F'(QUEUE|TYPE|CURDEPTH)' '/QUEUE\(.*\)/{printf "%s - %s - ", $2, $3}/CURDEPTH/{printf "%s\n", $2}'
 GE 0)
(QE.QUEUE.NAME1)                - (QLOCAL) - (0)
(QE.QUEUE.NAME2)                - (QLOCAL) - (0)
(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3) -  - (QLOCAL)
(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME4) -  - (QLOCAL)
(QE.QUEUE.NAME5)                - (QLOCAL) - (0)
(QE.QUEUE.NAME.QUEUE.NAME6) -  - (QLOCAL)
(QE.QUEUE.NAME7)                - (QLOCAL) - (0)

主要问题是当队列名称很大时,输出无法正确显示队列深度。


和sed

sed -rn 's|QUEUE\((.*)\)\s+TYPE\((.*)\)\s+CURDEPTH\((\d+)\)|\2 - \1 - \3|p'

$ echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME | sed -rn 's|QUEUE\((.*)\)\s+TYPE\((.*)\)\s+CURDEPTH\((\d+)\)|\2 - \1 - \3|p'
$ echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME | sed -rn 's|QUEUE\((.*)\)\s+TYPE\((.*)\)|\2 - \1|p'
   QLOCAL - QUEUE.NAME1
   QLOCAL - QUEUE.NAME2
   QLOCAL - QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3
   QLOCAL - QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME4
   QLOCAL - QE.QUEUE.NAME5
   QLOCAL - QE.QUEUE.NAME.QUEUE.NAME6
   QLOCAL - QE.QUEUE.NAME7

sed当我添加\s+CURDEPTH表达式时什么都不显示。只有当我删除它时它才会显示队列,但随后我丢失了深度值。


你们能就此给我一些建议吗?

sed
  • 2 个回答
  • 144 Views
Martin Hope
ITnewbie
Asked: 2021-11-29 20:07:44 +0800 CST

Linux可以做条件判断在Linux的某行插入内容吗

  • 0

Linux可以做条件判断在Linux中的某一行插入内容吗?

例如,我想将用户“test”添加到 /etc/sudoers 让它可以切换到 root:

  1 #
  2 # This file MUST be edited with the 'visudo' command as root.
  3 #
  4 # Please consider adding local content in /etc/sudoers.d/ instead of
  5 # directly modifying this file.
  6 #
  7 # See the man page for details on how to write a sudoers file.
  8 #
  9 Defaults        env_reset
 10 Defaults        mail_badpass
 11 Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
 12 
 13 # Host alias specification
 14 
 15 # User alias specification
 16 
 17 # Cmnd alias specification
 18 
 19 # User privilege specification
 20 root    ALL=(ALL:ALL) ALL
 21 
 22 # Members of the admin group may gain root privileges
 23 %admin ALL=(ALL) ALL
 24 
 25 # Allow members of group sudo to execute any command
 26 %sudo   ALL=(ALL:ALL) ALL
 27 
 28 # See sudoers(5) for more information on "#include" directives:
 29 
 30 #includedir /etc/sudoers.d

我希望我的命令找到第 20 行(如果 root ALL=(ALL:ALL) ALL )然后在第 21 行添加以下内容

test    ALL=(ALL:ALL) ALL

Linux 命令可以做到这一点,还是我只能通过 Perl 或 Python 等编码来做到这一点?

我对 Linux 很陌生,感谢任何帮助!

ubuntu awk sed
  • 1 个回答
  • 33 Views
Martin Hope
MiK
Asked: 2021-06-22 03:59:25 +0800 CST

在 fstab 中替换 fsck 的阶段

  • 1

我正在寻找一些方法来替换我的 fstab 文件中的 fsck 阶段,但仅限于包含特定路径的行。

目前 fstab 看起来像这样:

/dev/mapper/vgroot-root /          xfs          defaults          0 0
/dev/mapper/vgroot-home /home          xfs          defaults          0 0
/dev/mapper/vgroot-opt /opt          xfs          defaults          0 0
/dev/mapper/vgroot-var /var          xfs          defaults          0 0
/dev/mapper/vgapp-optapp /opt/apt          xfs          defaults          0 0

192.168.1.1:/app/rep_t1 /data/rep_t1          nfsrep_t1 defaults          0 0
192.168.1.1:/app/rep_t1 /data/rep_t1          nfsrep_t1 defaults          0 0

我想将阶段从“0 0”更改为“1 2”,但仅适用于本地文件系统(/dev/mapper)。我怎样才能做到这一点?目前我只能更改 1 个值,如下所示:

sed -i -e '/mapper/ s/0/1/' /etc/fstab

应该是这样的:

/dev/mapper/vgroot-root /          xfs          defaults          1 2
/dev/mapper/vgroot-home /home          xfs          defaults          1 2
/dev/mapper/vgroot-opt /opt          xfs          defaults          1 2
/dev/mapper/vgroot-var /var          xfs          defaults          1 2
/dev/mapper/vgapp-optapp /opt/apt          xfs          defaults          1 2

192.168.1.1:/app/rep_t1 /data/rep_t1          nfsrep_t1 defaults          0 0
192.168.1.1:/app/rep_t1 /data/rep_t1          nfsrep_t1 defaults          0 0
fstab fsck sed
  • 1 个回答
  • 47 Views
Martin Hope
M.Ch.
Asked: 2021-04-05 11:08:03 +0800 CST

管道 nc 到 sed 并评估每行的日期时间

  • 0

有人可以提供任何想法,我如何将数据从 nc 传输到 sed(或 awk 或其他任何东西)并在每行之后评估并写入文件时间戳?我有的:

# cat /etc/systemd/system/ncserver.service
[Unit]
Description=netcat listener
After=network.target

[Service]
Restart=always
RestartSec=1
ExecStart=/usr/bin/bash -c '/usr/bin/nc -n -v -l -k -p 1313 >> /opt/data/$(hostname)-$(date -u +%%y%%m%%d-%%H).txt'

[Install]
WantedBy=multi-user.target

简单的侦听器 - 通过原始 tcp 接收文本,发送到文件中(每天由 cron 重新启动一次以生成新文件)

我想将当前时间戳附加到每一行文本(在行的开头或结尾,没关系)。尝试过 sed、awk,但问题是我无法评估date每一行 - 它仅在服务启动时评估一次。看起来像这样

109582 ?        Ss     0:00 /usr/bin/bash -c /usr/bin/nc -n -v -l -k -p 1313 | /usr/bin/sed 's/^/'$(date +%s)
 109583 ?        S      0:00 /usr/bin/nc -n -v -l -k -p 1313
 109584 ?        S      0:00 /usr/bin/sed s/^/1617555467\;/g

管道可能根本不是答案,但我有点受到 bash 的限制。有任何想法吗?..

bash text pipe sed nc
  • 2 个回答
  • 240 Views
Martin Hope
eignhpants
Asked: 2020-10-16 12:43:36 +0800 CST

systemd ExecStart 中的转义字符失败

  • 2

我有以下代码片段从 jenkins 服务器 jnlp 配置文件中提取值。它在终端中开箱即用,但不能作为一个单元使用。我想要一个单位,这样我就可以将值放在某个地方并将其用作环境变量。但是我不断收到转义序列错误。我发现这表明我只需要担心引号和斜杠,但我得到了相同的结果。这是ExecStart包含 sed 的文件:

ExecStart=/bin/sh -c 'curl -L -s -X GET http://10.x.x.x:8080/computer/name-of-executor/slave-agent.jnlp | sed \"s/.*<application-desc main-class=\"hudson.remoting.jnlp.Main\"><argument>\([a-z0-9]*\).*/\1/\" >> /etc/build_environment'

我尝试了许多转义字符的组合都无济于事。此外,我使用相同的模式从元数据中提取值(使用 curl、管道等)并且效果很好。绝对对这里发生的事情感到困惑

systemd sed jenkins cloud-init
  • 1 个回答
  • 1777 Views
Martin Hope
Kalib Zen
Asked: 2020-05-15 05:11:47 +0800 CST

使用 sed 命令在 linux 终端中用注释替换配置文件

  • 0

我对sed略知一二。在 /etc/nanorc 我得到了一堆带有注释的设置(例如:)。

#bind ^K setting 1
#bind ^F whereis all
#bind ^J setting 3

所以,我只想注释掉这个设置以在 nano 中启用键 CTRL+D:

#bind ^F whereis all

我试过这个,但似乎它不起作用:

sed -ri "s/#bind ^F whereis all.*$/\bind ^F whereis all/" /etc/nanorc

说真的,我不知道该怎么做。

sed
  • 1 个回答
  • 220 Views
Martin Hope
user3018558
Asked: 2020-03-16 01:14:43 +0800 CST

从任何命令输出中屏蔽公共 IP 地址(用于诊断)

  • 1

我正在编写一个脚本来从 BusyBox v1.25.1/Linux 2.6.36/router 中提取信息,用户可以在其中简单地运行脚本并将输出复制/粘贴到提交表单中以请求支持。该脚本本质上是一个命令列表,如route、ifconfig等。由于busybox 的含义,我仅限于/bin/sh。

我正在尝试找到一种智能方法来仅从输出中自动屏蔽所有公共 IP 地址。替换完整的 IP 已经很好了,但是如果可能的话,我会在每个命令(甚至是内部函数)的末尾寻找一个管道命令来简单地替换前两个八位字节 80.80.80.80 , 例如XX.XX.80.80

一个不错的功能是替换相同数量的数字以尽可能保留格式。例如

8.8.8.8=X.X.X.X 80.80.8.8=XX.XX.X.X 180.180.80.8=XXX.XXX.XX.X

实际例子:

root@router:/proc# route | filtering-goes-here Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface XX.XX.168.1 * 255.255.255.255 UH 0 0 0 vlan2 172.16.9.0 * 255.255.255.0 U 0 0 0 br1 10.10.9.0 * 255.255.255.0 U 0 0 0 br0 10.114.126.0 * 255.255.254.0 U 0 0 0 tun11 XX.XX.168.0 * 255.255.252.0 U 0 0 0 vlan2 10.10.0.0 * 255.255.0.0 U 0 0 0 tinc 127.0.0.0 * 255.0.0.0 U 0 0 0 lo default cpc86269 0.0.0.0 UG 0 0 0 vlan2

谢谢!!

replace busybox sed mask sh
  • 1 个回答
  • 288 Views
Martin Hope
user99201
Asked: 2020-02-11 09:53:43 +0800 CST

使用 sed 去除具有不同名称的多个案例

  • 0

我有一个 ansible 库存,我需要删除所有以site2-.

例如,我有一个列表,其中包含名为:

[site2-static-web]
site2-ansible
site2-accounts
site2-admin
site2-analytics
site2-audit
site2-botruntime
site2-campaigns
site2-config
site2-coupons
site2-edge
site2-minio
site2-permissions
site2-registry
site2-surveys
site2-websockets
site2-amc-server
site2-static-web
site2-elasticsearch
site2-logstash
site2-kibana
site2-keycloak
site2-pgsql
site2-mysql
site2-rabbitmq
site2-redis
site2-zipkin

我试过sed -i.bak 's/site2-*///g' mmp_default了,但我得到的只是site2把末端留在里面的移除。

site2-ansible
site2-accounts

成为:

ansible
accounts

我怎样才能正确地做到这一点?

sed
  • 1 个回答
  • 38 Views
Martin Hope
Eli
Asked: 2019-02-14 08:49:18 +0800 CST

从所有目录和文件名中删除单引号

  • 1

我最近运行了一个 sed 命令,但我输入了错误的命令(是的,确实发生了)。

所以现在我的目录和文件名看起来像'Call of Duty'. 如何递归返回并重命名所有文件和目录以删除'?

这是我运行的命令find . -type f -name "*.css" -exec sed -i'' -e 's|http://cdn|//cdn|g' {} +

sed
  • 1 个回答
  • 1456 Views
Martin Hope
Karn Kumar
Asked: 2018-08-14 03:03:59 +0800 CST

从最后一列linux中删除一些字符集

  • 0

我想删除最后一列输出中连字符“e-”之后的所有内容..

下面是我的输出的样子..

# awk '/out: OpenSSL/ { gsub( /[][]|out:/ , "" ) ;  print $1,$2,$3 }' sslcheck.log | column -t

myserver1                         OpenSSL  1.0.1e-fips
myserver2                         OpenSSL  0.9.8e-fips-rhel5

我希望在 char+hyphen(e-).. 之后的最后一列中删除所有内容。

想要的输出..

myserver1                         OpenSSL  1.0.1
myserver2                         OpenSSL  0.9.8
sed
  • 1 个回答
  • 42 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve