从一个多行输出Bash灰显多行

从一个多行输出Bash灰显多行,bash,awk,output,dumpsys,Bash,Awk,Output,Dumpsys,我有一个命令dumpsys power,输出如下: POWER MANAGER (dumpsys power) Power Manager State: mDirty=0x0 mWakefulness=Awake # mWakefulnessChanging=false mIsPowered=false mPlugType=0 mBatteryLevel=67 # mBatteryLevelWhenDreamStarted=0

我有一个命令
dumpsys power
,输出如下:

    POWER MANAGER (dumpsys power)
    Power Manager State: mDirty=0x0
    mWakefulness=Awake #
    mWakefulnessChanging=false
    mIsPowered=false
    mPlugType=0
    mBatteryLevel=67 #
    mBatteryLevelWhenDreamStarted=0
    mDockState=0
    mStayOn=false #
    mProximityPositive=false
    mBootCompleted=true #
    mSystemReady=true #
    mHalAutoSuspendModeEnabled=false
    mHalInteractiveModeEnabled=true
    mWakeLockSummary=0x0
    mUserActivitySummary=0x1
    mRequestWaitForNegativeProximity=false
    mSandmanScheduled=false
    mSandmanSummoned=false
    mLowPowerModeEnabled=false #
    mBatteryLevelLow=false #
    mLastWakeTime=134887327 (59454 ms ago) #
    mLastSleepTime=134881809 (64972 ms ago) #
    mLastUserActivityTime=134946670 (111 ms ago)
mLastUserActivityTimeNoChangeLights=134794061 (152720 ms ago)
mLastInteractivePowerHintTime=134946670 (111 ms ago)
mLastScreenBrightnessBoostTime=0 (134946781 ms ago)
mScreenBrightnessBoostInProgress=false
mDisplayReady=true #
mHoldingWakeLockSuspendBlocker=false
mHoldingDisplaySuspendBlocker=true
    Settings and Configuration:
mDecoupleHalAutoSuspendModeFromDisplayConfig=false
mDecoupleHalInteractiveModeFromDisplayConfig=true
mWakeUpWhenPluggedOrUnpluggedConfig=true
mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig=false
mTheaterModeEnabled=false
mSuspendWhenScreenOffDueToProximityConfig=false
mDreamsSupportedConfig=true
mDreamsEnabledByDefaultConfig=true
mDreamsActivatedOnSleepByDefaultConfig=false
mDreamsActivatedOnDockByDefaultConfig=true
mDreamsEnabledOnBatteryConfig=false
mDreamsBatteryLevelMinimumWhenPoweredConfig=-1
mDreamsBatteryLevelMinimumWhenNotPoweredConfig=15
mDreamsBatteryLevelDrainCutoffConfig=5
mDreamsEnabledSetting=false
mDreamsActivateOnSleepSetting=false
mDreamsActivateOnDockSetting=true
mDozeAfterScreenOffConfig=true
mLowPowerModeSetting=false
mAutoLowPowerModeConfigured=false
mAutoLowPowerModeSnoozing=false
mMinimumScreenOffTimeoutConfig=10000
mMaximumScreenDimDurationConfig=7000
mMaximumScreenDimRatioConfig=0.20000005
mScreenOffTimeoutSetting=60000 #
mSleepTimeoutSetting=-1
mMaximumScreenOffTimeoutFromDeviceAdmin=2147483647 (enforced=false)
mStayOnWhilePluggedInSetting=0
mScreenBrightnessSetting=102
mScreenAutoBrightnessAdjustmentSetting=-1.0
mScreenBrightnessModeSetting=1
mScreenBrightnessOverrideFromWindowManager=-1
mUserActivityTimeoutOverrideFromWindowManager=-1
mTemporaryScreenBrightnessSettingOverride=-1
mTemporaryScreenAutoBrightnessAdjustmentSettingOverride=NaN
mDozeScreenStateOverrideFromDreamManager=0
mDozeScreenBrightnessOverrideFromDreamManager=-1
mScreenBrightnessSettingMinimum=10
mScreenBrightnessSettingMaximum=255
mScreenBrightnessSettingDefault=102
Sleep timeout: -1 ms
Screen off timeout: 60000 ms
Screen dim duration: 7000 ms
Wake Locks: size=0 Suspend Blockers: size=4
PowerManagerService.WakeLocks: ref count=0
PowerManagerService.Display: ref count=1
PowerManagerService.Broadcasts: ref count=0
PowerManagerService.WirelessChargerDetector: ref count=0
Display Power: state=ON #
我希望以以下格式获得标有#的行:

mScreenOffTimeoutSetting=60000
mDisplayReady=true
***
ScreenOfftimeoutSetting = 60000
DisplayReady = true

命令输出可能因设备而异,某些行可能不存在或位于不同的位置。因此,如果搜索的行不存在,则不应生成错误。

不清楚您想要什么。Aou可以使用sed从文件中提取变量,并对它们执行任何操作。下面是一个例子:

sed -n -e 's/^mSomeName=\(.*\)/newVariable=\1/p' -e 's/^mOtherName=.*+\(.*\)/newVariable2=\1/p' myFile
说明:

  • -n
    根据默认值不输出任何内容
  • -e
    下面是一个表达式。这是必需的,因为我们有多个表达式
  • s/^mSomeName=\(.*)/newVariable=\1/p
    如果文件以
    mSomeName=
    开始(
    mSomeName=
    捕获接下来的内容(
    \(.*)
    ),将行替换为
    newVariable=\1
    ,其中捕获的是
    \1
    ,然后打印出来(
    p
  • 's/^mOtherName=.+()/newVariable2=\1/p'与前面的表达式类似,但将捕获
    +
    签名后的内容,并在
    newVariable2
    后面打印出来
这有点像:

$ sed -n -e 's/^mSomeName=\(.*\)/newVariable=\1/p' -e 's/^mOtherName=.*+\(.*\)/newVariable2=\1/p' <<<$'mSomeName=SomeValue\nmOtherName=OtherValue+Somethingelse'
newVariable=SomeValue
newVariable2=Somethingelse
eval将执行字符串,该字符串在本例中设置变量值:

$ eval a=1
$ echo $a
1

如果只想使用Grep命令,可以使用-A(After)和-B(Before)选项和管道

这是一个有两行的示例

文件test.txt:

test
aieauieaui
test
caieaieaipe

mSomeName=SomeValue
mOtherName=OtherValue+Somethingelse
nothing
blabla
mSomeName=SomeValue2
mOtherName=OtherValue+Somethingelse2
要使用的命令:

grep -A 1 'mSomeName' test.txt |grep -B 1 'mOtherName'
输出:

mSomeName=SomeValue
mOtherName=OtherValue+Somethingelse
--
mSomeName=SomeValue2
mOtherName=OtherValue+Somethingelse2

发布输入和预期输出如果输出长度为50-100行,最好制作一个较小的示例(例如10行,提取2)。无需使用
for
循环
awk-F='$1~/^(mSomeValue | someOther | orhirdetc)$/{print$2}'
将从正则表达式中的键中提取值,以标准输出。我用命令的完整输出更新了问题。我已经尝试了您的awk命令,但由于某种原因,它返回blank for me:/Works for me,意思是我得到了预期的输出:。。。那个输出是否真的有用是另一个问题,但你们的问题陈述只会让我们猜测。(如果要忽略前导空格,请在正则表达式中的第一个
^
之后添加类似
[]*
的内容。)这不起作用,因为输出可能因设备而异,但无论如何,感谢您的回答:D
mSomeName=SomeValue
mOtherName=OtherValue+Somethingelse
--
mSomeName=SomeValue2
mOtherName=OtherValue+Somethingelse2