热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Bash:从一个引用字符串块中的每个带引号的字符串中创建一个变量

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Bash:从一个引用字符串块中的每个带引号的字符串中创建一个变量相关的知识,希望对你有一定的参考价值。 我正在尝试编写一个脚本,它将遍历Shortcu

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Bash:从一个引用字符串块中的每个带引号的字符串中创建一个变量相关的知识,希望对你有一定的参考价值。



我正在尝试编写一个脚本,它将遍历Shortcuts > ServicesKeyboard Preference Pane部分中的每个服务,并禁用它。

这是禁用服务的基本命令:

defaults write pbs NSServicesStatus -dict-add SERVICE "

enabled_context_menu
enabled_services_menu
key_equivalent""

"

提前获取所有服务并将它们放入脚本是低效的,因为在安装新软件时会逐步添加许多服务。它必须是某种循环。

到目前为止,我一直在尝试使用defaultsawk来获取包含服务的每一行。

a=$(defaults read pbs NSServicesStatus | awk 'NR%5==2' ) && echo $a

而且,这是输出:

"com.ScooterSoftware.BeyondCompare - Compare Files - bcCompareFiles" = { "com.ScooterSoftware.BeyondCompare - Compare Folders - bcCompareFolders" = { "com.ScooterSoftware.BeyondCompare - Select Left File for Compare - bcSelLeftFile" = { "com.ScooterSoftware.BeyondCompare - Select Left Folder for Compare - bcSelLeftFolder" = { "com.apple.BluetoothFileExchange - Send File To Bluetooth Device - sendFileUsingBluetoothOBEXService" = { "com.apple.ChineseTextConverterService - Convert Text from Simplified to Traditional Chinese - convertTextToTraditionalChinese" = { "com.apple.ChineseTextConverterService - Convert Text from Traditional to Simplified Chinese - convertTextToSimplifiedChinese" = { "com.apple.ChineseTextConverterService - Convert Text to Full Width - convertTextToFullWidth" = { "com.apple.ChineseTextConverterService - Convert Text to Half Width - convertTextToHalfWidth" = { "com.apple.Dictionary - Look Up in Dictionary - doLookupService" = { "com.apple.FolderActionsSetup - Folder Actions Setup - openFilesFromPasteboard" = { "com.apple.Grab - Capture Selection from Screen - variableSelection" = { "com.apple.ImageCaptureService - Import Image - ImportImage" = { "com.apple.QuickTime.service.encodeSelectedAudioFiles - Encode Selected Audio Files - runWorkflowAsService" = { "com.apple.Safari - Add to Reading List - addToReadingList" = { "com.apple.Safari - Search With %WebSearchProvider@ - searchWithWebSearchProvider" = { "com.apple.ScriptEditor2 - Script Editor/Get Result of AppleScript - runAsAppleScript" = { "com.apple.SpotlightService - SEARCH_WITH_SPOTLIGHT - doSearchWithSpotlight" = { "com.apple.Stickies - Make Sticky - makeStickyFromTextService" = { "com.apple.Terminal - New Terminal Tab at Folder - newTerminalAtFolder" = { "com.apple.Terminal - New Terminal at Folder - newTerminalAtFolder" = { "com.apple.Terminal - Open man Page in Terminal - openManPage" = { "com.apple.Terminal - Search man Page Index in Terminal - searchManPages" = { "com.apple.finder - Finder/Open - open" = { "com.apple.finder - Finder/Reveal - reveal" = { "com.apple.finder - Finder/Show Info - showInfo" = { "com.apple.mail - Mail/New Email To Address - mailTo" = { "com.apple.mail - Mail/New Email With Selection - mailSelection" = { "com.apple.services.addToiTunesAsSpokenTrack - Add to iTunes as a Spoken Track - runWorkflowAsService" = { "com.apple.services.encodeSelectedVideoFiles - Encode Selected Video Files - runWorkflowAsService" = { "com.apple.services.setDesktopPicture - Set Desktop Picture - runWorkflowAsService" = { "com.apple.services.showMap - Show Map - runWorkflowAsService" = { "com.apple.systemuiserver - Open URL - openURL" = { "com.evernote.Evernote - ENApplicationServiceMenuItemTitle - serviceCreateNote" = { "com.flexibits.cardhop.mac - Send to Cardhop - sendToCardhop" = { "com.flexibits.fantastical2.mac - Send to Fantastical 2 - sendToFantastical" = { "com.houdah.HoudahSpot4 - New HoudahSpot Search - newSearch" = { "com.houdah.HoudahSpot4 - Search Folders in HoudahSpot - folderSearch" = { "com.houdah.HoudahSpot4 - Search in HoudahSpot - search" = { "com.kapeli.dashdoc - Create Snippet in Dash - createSnippetService" = { "com.kapeli.dashdoc - Look Up in Dash - lookupService" = { "net.pornel.ImageOptim - ImageOptimize - handleServices" = { }

每个引用的字符串代表服务。

这是我的问题:

我试图用这个=命令删除所有无关的数据和空格({}sed),但无法摆脱那个单独的尾随}

b=$(echo $a | sed -E -e 's/ = { / /g' ) && echo "${b}"

即使没有尾随的}(无论如何只会在最后一次迭代中产生错误,或者我相信),在我所做的循环中没有正确解析单个字符串:

for service in "${b}"; do
defaults write pbs NSServicesStatus -dict-add "${service}" "

enabled_context_menu
enabled_services_menu
key_equivalent""

"
done

我仅使用以下命令进行测试,但未获得有效结果:

/usr/libexec/PlistBuddy -c "Print :NSServicesStatus:${service}" ~/Library/Preferences/pbs.plist

似乎只有服务被正确解析,我不知道哪一个:

Dict {
key_equivalent =
enabled_context_menu = false
enabled_services_menu = false
}

我该如何解决这个问题?

谢谢!


答案

我实际上并不宽容解析或使用结构不知道的工具生成结构化数据,但忽略了 -

while IFS= read -r service; do
service=${service%'"'}; service=${service#'"'}
defaults write pbs NSServicesStatus -dict-add "${service}" '

enabled_context_menu
enabled_services_menu
key_equivalent""

'
done <<(egrep -o '"[^"]+"' <<<"$a")

另一答案

当我正确理解您的数据时,您可以获得服务

echo "$b" | tr '{' '\n' | sed -rn 's/[^"]"(.*)".*/\1/p'

您可以使用回声结构defaults ...

echo "$b" | tr '{' '\n' | sed -rn 's/[^"]"(.*)".*/\1/p' |
xargs -I xxx echo 'defaults write pbs NSServicesStatus -dict-add "xxx" "

enabled_context_menu
enabled_services_menu
key_equivalent""
"
'

当你想要调用程序defaults时,可以删除第二个echo

echo "$b" | tr '{' '\n' | sed -rn 's/[^"]"(.*)".*/\1/p' |
xargs -I xxx defaults write pbs NSServicesStatus -dict-add "xxx" "

enabled_context_menu
enabled_services_menu
key_equivalent""
"


推荐阅读
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文由杨勇和思远于2012年12月27日撰写,主要探讨了如何使用PHP进行网页内容抓取,特别是针对字符较多的网站。文章详细介绍了正则表达式失效的原因,并提供了优化方法,同时展示了如何抓取淘宝服饰栏、天气信息以及IP地址对应的地理位置。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
author-avatar
159dzhqian449_734
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有