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
    • 最新
    • 标签
主页 / user-563952

Zsar's questions

Martin Hope
Zsar
Asked: 2025-01-09 21:52:45 +0800 CST

如何在 Windows 11 上安装 rsync?

  • 5

如何在 Windows 11 中获得一个像 Linux(Debian)rsync 一样运行的 rsync?

根据 Reddit 的说法:

只需使用 rsync。安装 WSL 就可以了。

我在我的计算机上启用了 Windows 功能“适用于 Linux 的 Windows 子系统”,并且可以在 cmd 中使用 ls,但不能在 rsync 中使用。——但我相信 ls 来自git,而不是来自 WSL。(通过安装程序选项“从命令提示符中使用 Git 和可选的 Unix 工具”。)

我想避免安装完整的 VM/发行版,但GnuWin32似乎已经死了。

有人说

我通过 git-bash 为 Windows 安装 rsync。

但是……怎么办?Bash 无法安装任何东西,需要一个包管理器或安装程序。我检查了最新的安装程序中的 rsync 组件,但其中没有。

windows-11
  • 2 个回答
  • 104 Views
Martin Hope
Zsar
Asked: 2025-01-04 00:33:28 +0800 CST

GNU Awk 如何匹配表达式与捕获组?

  • 8

我正在一个相当老的 Debian 10 系统上测试这个

GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2)

在

GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)

awk和命令都gawk调用相同的 GNU Awk 版本。

使用这些答案[1] [2] [3]我尝试编写一个脚本来检测 msgcat 发出的 gettext 合并冲突。

明文测试输入,下文称为merged_file.po:

"#-#-#-#-#  de.po (Application Library)  #-#-#-#-#\n"
"#-#-#-#-#  de.po (Middleware Library)  #-#-#-#-#\n"
"#-#-#-#-#  de.po  #-#-#-#-#\n"

我选择 awk 而不是 grep 和 sed 来跳过标题NR > <line number>。由于这没有问题,为了简洁起见,我在这里省略了它。

行语法:

  1. "#-#-#-#-#
  2. 源文件名
  3. ()如果在源文件中设置,则Project-Id-Version
  4. #-#-#-#-#\n"

使用RegExr构建的正则表达式,并在regex101支持的所有形式中得到验证:(#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?#-#-#-#-#
请注意,这假定文件名不包含空格 - 目前我不介意。)

预期效果有两方面:

  1. 查找输出 .po 文件中出现的所有情况以发出错误消息
  2. 在捕获组 1 中捕获库名称,使错误消息更易于阅读(特别是对于不太熟悉 gettext 的人)

这些是我尝试过的调用:

  • 工作基线awk '/#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?/ { print NR, $0 }' merged_file.po查找所有出现的情况并打印整行。
  • awk '/#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?#/ { print NR, $0 }' merged_file.po删除所有与 Project-Id-Version 相关的条目
  • awk 'match($0, /#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?/, library_name) { print NR, "from library \047"library_name[1]"\047" }' merged_file.po打印空字符串,而不是<Project-Id-Version>
    • library_name[0]包含直到非捕获组的行,因此显然match根本不会发出捕获组 - 如果有的话,library_name[0]则会包含整行。
  • awk '/#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?/ { library_name = gensub(/#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?/, "\\1", "g"); print NR, "from library \047"library_name"\047" }' merged_file.po打印"(<Project-Id-Version>) #-#-#-#-#\n"而不是<Project-Id-Version>
    • \\0确实包含了整行。
    • \\2包含与虽然相同的字符串\\1。(预期:空)

相关工具(例如 grep 或 sed)对 RegEx 的支持通常令人惊讶地不尽如人意,因此,与其询问为什么我的特定调用不起作用,我宁愿更笼统地问:

GNU Awks 的正则表达式匹配与“常态”有何不同?

(绝对)有效的 X/Y 答案:

  • 我使用的版本太旧了。(如果是,我至少需要哪一个?)
  • 我瞎了,我的 RegEx 也坏了。(如果是这样:怎么办?)
  • 应该怪罪 Bash,我需要一些神秘的逃脱方法。(如果是的话:哪些方法以及为什么?)
  • Baeldung 有一次是错的,毕竟,还有一个更简单的解决方案,而不是使用 Awk。(如果有:哪一个?)
    • 为了避免将来再次遇到同样的问题,我只希望除了 之外还能收到这封邮件,而不是代替问题本身的答案。我真的想更好地了解我对 Awk 有什么期望,以及什么不是。
regex
  • 1 个回答
  • 59 Views
Martin Hope
Zsar
Asked: 2024-12-08 03:08:30 +0800 CST

Telegram 解释为 URL 的转义版本字符串

  • 6

Potion Craft 2.0 今天发布了,我给两个熟人写了一封信

嘿,2.0.1.1 版本已经发布!

他们知道自己早已卸载了游戏,因为厌倦了等待可能永远不会到来的更新。

... Telegram 将其解释为 URLhttps://2.0.1.1并生成可点击的链接。在这种特殊情况下,这是“无害的”:那里有一个服务器,但它没有响应。我宁愿不“意外地”链接到谁知道的地方,即使我没有受到恶意软件的报复,打扰某个随机服务器似乎也很不礼貌。

我如何转义字符串“2.0.1.1”以便 Telegram 显示2.0.1.1但不插入超链接?

我尝试过\2.0.1.1,,""""2.0.1.1""""但2\.0\.1\.1没有成功。

不幸的是,谷歌搜索仍然受到“如何阻止生成链接预览缩略图”的毒害,这是几年前的一个问题。

url
  • 1 个回答
  • 32 Views
Martin Hope
Zsar
Asked: 2024-11-23 03:30:19 +0800 CST

如何将基于线的管道转变为连续流?

  • 5

在不断寻求将 .po 文件合理地纳入 git 版本控制的过程中,我编写了这个脚本用于 diff 和 filter-clean: msgcat --no-location --no-wrap --sort-output - | msgattrib --no-obsolete - | grep -Ev '^"POT-Creation-Date|^"PO-Revision-Date|^"Last-Translator|^"X-Generator'

调用此脚本的 .gitconfig 条目如下所示:

[diff "podiff"]
    textconv = cat "$1" | "$(git rev-parse --show-toplevel)"/podiff
    cachetextconv = true
[filter "pocomments"]
    clean = "$(git rev-parse --show-toplevel)"/podiff
    smudge = cat "$1" # NOP; enable the other one temporarily to affect files on checkout, restore, etc., but please do not commit it -Zsar 2024-06-10
#   smudge = "$(git rev-parse --show-toplevel)"/podiff
    required

每个步骤都完成一项关键功能:

  1. 重构和不相关的代码更改使源位置和输入顺序不断变化。此 msgcat 调用将这些标准化,因此 commit-tet 文件没有这些更改。
  2. 每当 msgid 发生更改时,过时的条目会使更改集的大小加倍。我们有版本控制 -> 此 msgattrib 调用会删除它们。
  3. 每次有人使用专用工具编辑.po 文件的元数据条目中的这些字段时,它都会发生变化- 我们有版本控制 -> 这个 grep 调用会将它们删除。

现在又出现了一个障碍。注意到--no-wrap前面了吗?它不起作用。
此外,换行不稳定:每次奇怪的提交,都会有人在没有人为更改的情况下在行之间翻转一个单词。
此外,相关工具 Poedit也有一个“换行于”设置,禁用它也不起作用。(因为它委托给 gettext 工具,这并不奇怪。但这意味着我无法“仅此一次”规范化文件并完成它。- 因此我首先使用 git 过滤器。)

很好,我想到了,并测试了这个调用来删除它们:sed -z -e 's/\"\n\"//'。
它是将“msgid”和“msgstr”中的任何换行连接起来,这样工具就可以随心所欲地换行,每天都换一种方式,我不在乎。

  • 它可以独立工作:sed -z -e 's/\"\n\"//' test.po打印预期的输出。
  • 当通过 cat 管道传输时,它可以工作:cat test.po | sed -z -e 's/\"\n\"//'打印预期的输出。
  • 但是,当添加到现有脚本时,sed 步骤不起作用。

它似乎逐行接收输入。我尝试将它放在 grep 前面,但没有任何改善,而且我无法将它移到其他两个前面,因为 msgcat 和 msgattrib 有“我喜欢随机包装”的问题,这才是引发整个问题的根本原因。

我可以流式传输grep 的输出,或者更一般地基于行的管道的输出,以便我的流编辑器可以执行其工作吗?

(注:这个网站上有很多答案说“sed 不能做到这一点” - 但 sed 专门设计为不关心换行符,所以这听起来像是错误的信息。摘自手册页:

Sed 是一个流编辑器。流编辑器用于对输入流(文件或来自管道的输入)执行基本的文本转换。[...] sed 的工作原理是只对输入进行一次传递[.]

强调我的

问题很明显,有多个输入,我想要替换的字符串在它们之间分割。)

git
  • 1 个回答
  • 34 Views
Martin Hope
Zsar
Asked: 2024-01-25 00:38:54 +0800 CST

如何使bash脚本输出与终端和文件兼容?

  • 5

在 bash 中,如果我想生成定期状态消息,我可以通过发出热键组合来替换前一个状态消息,例如,如此处、此处或此处所示。当用户直接执行脚本时,这很好,因为它可以让他们随时了解情况,而不会弄乱屏幕。

但是,如果他们想在自动化上下文中使用相同的脚本,则输出将(必须)重定向到文件中:

./test.sh >log.txt

此时,\r、 、\b都\033[0K不起作用。

我如何使其适用于两种模式?

(例如,如果我可以检测输出流是否是文件,那么省略中间消息就足够简单了。)

  • 如果可能的话,我想避免在脚本中引入参数。现实世界的版本已经附带了几个。
  • 如果可能的话,我想避免处理脚本本身内部的输出流,例如根据这个问题,因此当嵌入到其他脚本中时它不会表现出令人惊讶的行为。

示例代码test.sh:

#!/bin/bash

PREVIOUS_JOB_STATUS=""
SECONDS=0          # auto-incremented by Bash; divide by INTERVAL_SECONDS to get number of retries
INTERVAL_SECONDS=3 # interval between polls to the server
TIMEOUT_SECONDS=10 # how long until we give up, because the server is clearly busy (or dead)
while true; do
  RETRY_SECONDS=$SECONDS
  if [ $RETRY_SECONDS -lt $INTERVAL_SECONDS ]; then # in the real world, here would be      the polling operation
    JOB_STATUS='queued'
  else
    JOB_STATUS='processing'
  fi
  RESULT=1                                          # in the real world, here would be ? of the polling operation
  if [ $RESULT -eq 0 ]; then                            # success
    exit $RESULT
  elif [ $RETRY_SECONDS -gt $TIMEOUT_SECONDS ]; then    # failure (or at least surrender)
    echo "Timeout exceeded waiting for job to finish. Current Job Status is '$JOB_STATUS'. Current result code is '$RESULT'."
    exit $RESULT
  elif [ "$PREVIOUS_JOB_STATUS" = "$JOB_STATUS" ]; then # no change yet,      replace last status message and try again
    echo -en '\033[1A\r\033[K' # move one line up                                : \033[1A ,
                               # move to pos1                                    : \r      ,
                               # delete everything between cursor and end-of-line: \033[K  ,
                               # omit line break                                 : -n
  else                                                  # job status changed, write   new  status message and try again
    PREVIOUS_JOB_STATUS=$JOB_STATUS
  fi
  SLEEP_MESSAGE='Waiting for job to finish. Waited '`printf "%02g" $SECONDS`" s. Current job status is '$JOB_STATUS'. Current result code is '$RESULT'."
  echo $SLEEP_MESSAGE
  sleep $INTERVAL_SECONDS
done

最终输出./test.sh:

Waiting for job to finish. Waited 00 s. Current job status is 'queued'. Current result code is '1'.
Waiting for job to finish. Waited 09 s. Current job status is 'processing'. Current result code is '1'.
Timeout exceeded waiting for job to finish. Current Job Status is 'processing'. Current result code is '1'.

最终输出./test.sh >log.txt 2>&1:

Waiting for job to finish. Waited 00 s. Current job status is 'queued'. Current result code is '1'.
Waiting for job to finish. Waited 03 s. Current job status is 'processing'. Current result code is '1'.
^[[1A^M^[[KWaiting for job to finish. Waited 06 s. Current job status is 'processing'. Current result code is '1'.
^[[1A^M^[[KWaiting for job to finish. Waited 09 s. Current job status is 'processing'. Current result code is '1'.
Timeout exceeded waiting for job to finish. Current Job Status is 'processing'. Current result code is '1'.

期望的最终输出./test.sh >log.txt 2>&1: 等于 的最终输出./test.sh。

linux
  • 1 个回答
  • 29 Views

Sidebar

Stats

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

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve